2015-10-17 6 views
0

Скажем, у меня есть это:Как удалить словарь из списка словарей?

d_list = [ {'id':1, 'Name': 'Hannah', weight:150}, {'id':2, 'Name':'Andrew', weight:200}, {'id':3, 'Name':'Joe', weight:180}, {'id':3, 'Name':'Joe', weight:180}] 

Как я могу, возможно, удалить сказать словарь с идентификатором 3? (Так что я список словаря будет содержать идентификатор 1, 2 и 4) или люди, которые весом более 180 (так что я не буду иметь идентификатор 2 больше)

Я пробовал все, от простых вещей, как

for d in d_list: 
    if d['weight'] > 180: 
     d_list.pop(d) 

К другим вещам, которые я нашел в google, но безрезультатно. Мне жаль, если это было опубликовано раньше или если это кажется очень легким, но я искал часы для чего-то, что мне помогло, и ничего не сделал.

ответ

2

, как это не очень хорошая идея, чтобы удалить из списка вы итерация я предлагаю следующий список понимание:

d_list = [item for item in d_list if item['weight'] <= 180] 
+0

Привет, спасибо за предложение, я на самом деле пробовал этот код в моей основной программе и ничего не делал. Не знаю, что я сделал не так. – Hansewl

+0

Вы назначили понимание списка 'd_list'? или вы использовали его внутри функции? –

+0

и, кстати, ваш код неправильный python (если вы не задали 'weight' to someting): вам нужно использовать' 'weight'' в качестве строки. –

0

Изменение списка во время прохода над ним не работает, как ожидалось. Вы должны создать новый список, содержащий только запись интересующие вас вместо того, чтобы:

d_list = [d for d in d_list if d['weight'] <= 180] 
+0

Разве это неэффективно, просто удаляя вещи? (Я новичок в python) – Hansewl

+1

Это нормально удалить из списка, если вы начинаете в конце. – Marichyasana

+0

@Andrei: Это даже более эффективно в целом. Удаление элемента из середины списка означает, что вам нужно переместить все последующие записи на один элемент вперед. Если вы сделаете это несколько раз, ваш алгоритм будет иметь квадратичное наихудшее время выполнения, тогда как этот подход будет линейным. –

0
index = next(index for index, dictionary in enumerate(d_list) 
      if dictionary['id'] == 3) 

delete d_list[index] 
Смежные вопросы