我有两个具有相同键的字典,我想对它们的值进行除法运算来更新或创建一个新字典,保留键不变,以商作为每个键的新值。
d1 = { 'a':12 , 'b':10 , 'c':2 }
d2 = { 'a':0 , 'c':2 , 'b':5}
d3 = d2 / d1
d3 = { 'a':0 , 'b':0.5 , 'c':1 }
除了遍历键值对并创建值的有序列表,然后进行除法运算,我不知道怎么做。我希望有一种更优雅的解决方案。
我有两个具有相同键的字典,我想对它们的值进行除法运算来更新或创建一个新字典,保留键不变,以商作为每个键的新值。
d1 = { 'a':12 , 'b':10 , 'c':2 }
d2 = { 'a':0 , 'c':2 , 'b':5}
d3 = d2 / d1
d3 = { 'a':0 , 'b':0.5 , 'c':1 }
除了遍历键值对并创建值的有序列表,然后进行除法运算,我不知道怎么做。我希望有一种更优雅的解决方案。
使用 viewkeys (python2.7):
{k: float(d2[k])/d1[k] for k in d1.viewkeys() & d2}
在Python 3中相同(我们可以完全省略float()
调用):
{k: d2[k]/d1[k] for k in d1.keys() & d2}
是的,我在这里使用了键交集;如果你绝对确定两者中的键是一样的,只需使用d2
:
{k: float(d2[k])/d1[k] for k in d2}
为了完整起见,在 Python 2.6 及之前,您需要使用带有生成器表达式的 dict()
构造函数来实现相同的功能:
dict((k, float(d2[k])/d1[k]) for k in d2)
生成一系列键-值元组。
d1 = { 'a':12 , 'b':10 , 'c':2 }
d2 = { 'a':0 , 'c':2 , 'b':5}
d3={x:float(d2[x])/d1[x] for x in d1}
print d3
输出:
{'a': 0.0, 'c': 1.0, 'b': 0.5}
>>> d1 = { 'a':12 , 'b':10 , 'c':2 }
>>> d2 = { 'a':0 , 'c':2 , 'b':5}
>>> d3 = dict((k, float(d2[k]) / d1[k]) for k in d2)
>>> d3
{'a': 0.0, 'c': 1.0, 'b': 0.5}
在3.2中,您可以使用.keys()方法和.get(key)方法。http://www.tutorialspoint.com/python/python_dictionary.htm
.get(key)
将返回None。虽然如果您循环遍历.keys()
,它总是会被定义,但这意味着.get(key)
比普通项访问(d1[key]
)要慢。 - Martijn Pieters
float
调用,并且d1.keys() & d2.keys()
可以写成d1.keys() & d2
。 - vaultahd2.viewkeys()
调用也不需要。 - Martijn Pieters