Python:如果存在dictA中的键并且键dictB执行某些操作

时间:2015-06-09 13:58:56

标签: python dictionary iteration

我必须比较两个dictonaries(未分类)。因此我会迭代一个dictonary而If键在dictA和dictB中,然后用值做一些事情。 (例如dictA [key] / dict [B])

dicts看起来像: 总= {1951:2,1952:2} 年= {1922:33,1951:1}

除了比率为{1951:0.5}之外,我会这样做,但它是空的。

我尝试了各种方法。最后一个:

for i in total:
            if i in years:
                ratio[i] = years[i] / total[i]

我也尝试过使用

year.viewkeys() | total.viewkeys()

但它会把钥匙还给我,我需要处理这些值。 (或者至少我不知道怎么样)

3 个答案:

答案 0 :(得分:0)

您可以使用set intersection

查找两个词典中的哪些键
>>> total = {1951: 2, 1952: 2}
>>> years = {1922: 33, 1951: 1}
>>> common = set(total.viewkeys()).intersection(years.viewkeys())
>>> common
{1951}

然后使用dict理解来计算比率

>>> ratio = {i: float(years[i])/float(total[i]) for i in common}
>>> ratio
{1951: 0.5}

答案 1 :(得分:0)

我猜是“而不是空”,你的意思是ratio{1951: 0}。如果您使用的是Python 2.7,那么它使用整数除法:1/2被截断为零。一种可能的解决方案是在分割之前转换为浮动。

total = {1951: 2, 1952: 2} 
years = {1922: 33, 1951: 1}
ratio = {}
for i in total:
    if i in years:
        ratio[i] = years[i] / float(total[i])

print ratio

结果:

{1951: 0.5}

答案 2 :(得分:0)

year.viewkeys() | total.viewkeys()

是一种非常有效的方法。尝试

commonkeys  = year.viewkeys() & total.viewkeys()

代替:

for key in commonkeys:
    ratio[key] = float(year[key]) / total[key]

请注意float是必要的,因为在python2中,整数上的/会导致2/3==0