我是Python新手。我有两个字典,它们共享相同的键,但键的值不同。我想比较两个词典,以便我得到每个键的值的数值差异。例如:
dict1 = {'hi' : 45, 'thanks' : 34, 'please' : 60}
dict2 = {'hi' : 40, 'thanks' : 46, 'please' : 50}
换句话说,我想收到第三本字典或一对列表,它们会显示这两个字典中值的数字差异(从dict2中减去dict1的值(反之亦然)。因此是这样的:
dict_difference = {'hi' : 5 , 'thanks' : -12, 'please' : 10}
我知道从另一个字典中减去一个字典:
dict1 = Counter({'hi' = 45, 'thanks' = 34, 'please' = 60})
dict2 = Counter({'hi' = 40, 'thanks' = 46, 'please' = 50})
dict3 = dict1-dict2
#只返回正值,因此它会给出:
dict3 = {'hi'= 5, 'please' = 10}
#这不是我想要的。
我还想过将字典转换成一对列表(我认为这就是它的名称):
dictlist = []
for key, value in dict1.iteritems():`
temp = (key, value)
dictlist.append(temp)
因此
print dictlist #gives:
[('hi', 45),('thanks' = 34), ('please' = 60)]
所以我想如果我能设法将字典转换成对列表然后以密钥的形式进行:值为key = value我可以应用subtract()方法和实现我想要的。
我想通过def __repr__(self)
{{1}}实现它,如https://docs.python.org/2/library/collections.html所示,但我并没有走得太远。
我将非常感谢任何帮助。如果可能,请留下您的代码说明。如果我的方法是错误的,并且有更简单的方法从另一个字典中减去一个字典的值,请分享它。
答案 0 :(得分:9)
首先,您的词典格式不正确(:
而非=
):
dict1 = {'hi':45, 'thanks':34, 'please':60}
dict2 = {'hi':40, 'thanks':46, 'please':50}
您可以使用词典理解。您基本上循环遍历一个字典,检查该键是否也在第二个字典中,并在输出字典中插入值的差异。全部在一行。
dic = {key: dict1[key]-dict2[key] for key in dict1 if key in dict2}
答案 1 :(得分:3)
你正走在正确的道路上,想着使用词典'密钥。
在这里,我浏览了第一本字典的密钥,检查它们是否在字典2中。然后我对dictionary2做了同样的事情,检查了dictionary1中的键,但也确保键不在结果字典中,所以我们不做重复的减法。
dict1 = {'hi': 45, 'thanks': 34, 'please': 60}
dict2 = {'hi': 40, 'thanks': 46, 'please': 50}
result = {}
for key in dict1.keys():
if key in dict2:
result[key] = dict1[key] - dict2[key]
for key in dict2.keys():
if key in dict1 and not key in result:
result[key] = dict1[key] - dict2[key]