好的,所以我必须摆脱所有具有负值的条目。我不知道为什么我的代码无效。
def main():
dic = {'aa': 20, 'bb': -10, 'cc': -12}
for i in dic:
if dic[i]<0:
del dic[i]
print(dic)
main()
答案 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}