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