【问题标题】:Comparing the values of two dictionaries to receive their numerical difference Python比较两个字典的值以接收它们的数值差异 Python
【发布时间】:2015-03-25 21:15:43
【问题描述】:

我是 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 的形式使其成为 key = value,我将能够应用 subtract() 方法和达到我想要的。

我想通过def __repr__(self) 实现它,如https://docs.python.org/2/library/collections.html 所示,但我没有走远。

如果有任何帮助,我将不胜感激。如果可能,请为您的代码留下描述。如果我的方法是错误的,并且有一种更简单的方法可以从另一个字典中减去一个字典的值,请也分享它。

【问题讨论】:

  • 那些不是字典格式的

标签: python dictionary subtraction valuestack


【解决方案1】:

首先,您的字典格式不正确(: 而不是=):

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}

【讨论】:

  • 嗨!非常感谢您的回复并为我解决了这个问题并纠正了我的字典语法。我试过了,确实有效!谢谢!
【解决方案2】:

考虑使用字典的键,您走在正确的道路上。

在这里,我检查了第一个字典的键,检查它们是否在字典 2 中。然后我对字典 2 执行相同操作,检查字典 1 中的键,同时确保键不在结果字典中,这样我们就不会重复减法。

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]

【讨论】:

  • 如果目标是只处理两个字典共享的密钥,那么第二个循环是不必要的,因为第一个循环已经找到了所有共享密钥。此外,对 keys 的调用是不必要的,因为循环遍历 dict 已经循环遍历键。调用 keys 只会花费不必要的时间和空间来构建密钥列表。
  • 正要说同样的话。
  • @JulienSpronck 的代码实际上比这个粘贴效率更高,所以用他的。
  • 也感谢您的回复!!
猜你喜欢
  • 2023-03-26
  • 2020-07-25
  • 2018-10-10
  • 1970-01-01
  • 1970-01-01
  • 2017-09-04
  • 1970-01-01
  • 2016-01-18
  • 2019-08-03
相关资源
最近更新 更多