我有两个具有相同键的字典,我想对值进行除法以更新或创建新字典,保持键不变,并将商作为每个键的新值。
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 }
除了遍历键、值对并创建值的有序列表,然后进行划分之外,我不确定如何执行此操作。我希望有一个更优雅的解决方案。
使用视图键(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)
它生成一系列键值元组。
这适用于所有 python,但是如果有 Py 2.7+ ,我会推荐@MartijnPieters的解决方案
>>> 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}
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}
在 3.2 中,您使用 .keys() 方法和 .get(key)。 http://www.tutorialspoint.com/python/python_dictionary.htm