我有2本字典:
First = {'A': 0.0, 'B': 0.0, 'C': 0.0, 'D': 0.0, 'E': 0.0, 'F': 0.0, 'G': 0.0, 'H': 0.0, 'I': 0.0, 'J': 0.0, 'K': 0.47, 'L': 0.0, 'M': 0.0, 'N': 0.0, 'O': 0.0, 'P': 0.0, 'Q': 0.0, 'R': 0.0, 'S': 0.41, 'T': 0.0}
和
Second = {'A': 0.0, 'B': 0.0, 'C': 0.0, 'D': 0.0, 'E': 0.0, 'F': 0.0, 'G': 0.0, 'H': 0.0, 'I': 0.18, 'J': 0.0, 'K': 1.0, 'L': 0.0, 'M': 0.0, 'N': 0.0, 'O': 0.0, 'P': 0.0, 'Q': 0.0, 'R': 0.0, 'S': 0.32, 'T': 0.0}
我想在条件中的第二个字典中删除某些值:
1-如果第二个字典的值<等于第一个字典的值,则将(k,v)放到第二个字典
2-如果第二个字典的值== 0.0,则将(k,v)放到第二个字典
最终,我们得出结果:
Second = {'I': 0.18,'K': 1.0, 'S': 0.32}
这是我的代码:
for key, value in dict(Second).items():
for key, value in dict(First).items():
if Second[value] == First[value] :
del Second[key]
elif First[value]> Second[value]:
del Second[key]
Second
但是不起作用:
KeyError: 0.0
有人可以帮我吗!
答案 0 :(得分:1)
您无法将值查找为字典的键。此外,您的第二循环使您已经清除了所有要清除的元素之后,便会循环浏览第二词典。
您正在寻找类似的东西:
Authorization = Bearer {{accessToken}}
甚至更好
for key, value in dict(Second).items():
if Second[key] == First[key] :
del Second[key]
elif First[key]> Second[key]:
del Second[key]
尽管是第二个条件,但指定它应该更像是:
for key, value in Second.items():
if Second[key] <= First[key]:
del Second[key]
答案 1 :(得分:1)
遍历第一个字典,因为它不会改变,并根据您的条件过滤掉
for k,v in First.iteritems():
if Second[k] < v or Second[k] == 0.0:
del Second[k]
输出:
{'I': 0.18, 'K': 1.0}
答案 2 :(得分:1)
您错误地使用项目值而不是键来尝试访问该值。此外,如果在迭代字典时尝试对其进行变异,则会遇到问题。相反,您可以使用dict理解。
例如:
d1 = {'A': 0.0, 'B': 0.0, 'C': 0.0, 'D': 0.0, 'E': 0.0, 'F': 0.0, 'G': 0.0, 'H': 0.0, 'I': 0.0, 'J': 0.0, 'K': 0.47, 'L': 0.0, 'M': 0.0, 'N': 0.0, 'O': 0.0, 'P': 0.0, 'Q': 0.0, 'R': 0.0, 'S': 0.41, 'T': 0.0}
d2 = {'A': 0.0, 'B': 0.0, 'C': 0.0, 'D': 0.0, 'E': 0.0, 'F': 0.0, 'G': 0.0, 'H': 0.0, 'I': 0.18, 'J': 0.0, 'K': 1.0, 'L': 0.0, 'M': 0.0, 'N': 0.0, 'O': 0.0, 'P': 0.0, 'Q': 0.0, 'R': 0.0, 'S': 0.32, 'T': 0.0}
d2 = {k: v for k, v in d2.items() if v != 0 and v != d1[k]}
print(d2)
# {'I': 0.18, 'K': 1.0, 'S': 0.32}