从字典中删除条目(Python)

时间:2013-12-06 07:57:10

标签: python-3.x dictionary

好的,所以我必须摆脱所有具有负值的条目。我不知道为什么我的代码无效。

def main():
dic = {'aa': 20, 'bb': -10, 'cc': -12}
for i in dic:
    if dic[i]<0:
        del dic[i]

print(dic)

main() 

5 个答案:

答案 0 :(得分:5)

您可以使用dict comprehensions来完成此任务。

dic = {k: v for (k, v) in dic.items() if v >= 0}

答案 1 :(得分:4)

这应该适用于Python 2.x - 用

代替for循环
 for i in dic.keys():
   if dic[i]<0:
    del dic[i]

这在Python 3.x中不起作用的原因是keys返回迭代器而不是列表 - 我在https://stackoverflow.com/a/11941855/2314737中找到了解释

相当微妙的区别 - 我不知道。

因此,在Python 3.x中,您需要使用

for i in list(dic):

答案 2 :(得分:2)

delete_list = []
for i in dic:
    if dic[i] < 0:
        delete_list.append(i)
for each in delete_list:
    del dic[each]

答案 3 :(得分:0)

d = {}
# ...

keys = list(d.keys())

for key in keys:
  if something_is_true:
    del d[key]

答案 4 :(得分:0)

使用 dict.pop()

myDict = {'aa': 20, 'bb': -10, 'cc': -12}
condition = []

for x, y in myDict.items ():
    if y <  0:
        condition.append(x)
        
[myDict.pop(x) for x in condition ]

print(myDict)

给予

{'aa': 20}