2015-10-17 79 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}] 

我怎麼可能說刪除ID爲3字典? (所以我的詞典列表將包含ID 1,2和4)或人的體重超過180(所以我不會有ID 2了)

我用盡了一切從簡單的事情像

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

對於我在谷歌上發現的其他東西,但無濟於事。對不起,如果之前發佈過,或者看起來超級容易,但我一直在尋找幾個小時來幫助我,而沒有做任何事情。

回答

2

,因爲它不是從列表中刪除一個好主意,你迭代,我建議以下列表理解:

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

您好,感謝您的建議,其實我已經試過了代碼在我的主要程序,它什麼也沒做。不知道我做錯了什麼。 – Hansewl

+0

您是否將列表理解分配給了'd_list'?還是你在一個函數裏面使用它? –

+0

順便說一下:你的代碼是不正確的python(除非你指定'weight'):你需要使用'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]