通过值比较2个字典并删除一些k,v python

时间:2019-03-01 16:25:46

标签: python dictionary

我有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

有人可以帮我吗!

3 个答案:

答案 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}