将多个词典与特定值进行比较

时间:2015-06-26 20:26:12

标签: python dictionary

我有四个类似长度的词典。

我想:

  1. 获取四者之间匹配的密钥。

  2. 迭代每个字典中的某个值,稍后我将对其进行比较并进行一些算术运算。

  3. 我已经使用嵌套循环(四个循环)完成了这一点,但这看起来效率不高。我想让这段代码更高效,更优雅。

    我想在不进行嵌套循环的情况下这样做:

     d1 = {1:18:[['28','Y','N'],['108','A','M'],...]
     d2,d3 and d4 are the same thing expect different values but some will have same keys 
     for k, v in di1.iteritems():
        for v1 in v:
              for k2,v2 in di2.iteritems():
                          for va2 in v2:
                                if k == k2:
                                 for k3,v3 in di3.iteritems():
                                  for va3 in v3:
                                    if k2 == k3:
                                     for k4,v4 in di4.iteritems():
                                       for va4 in v4:
                                        if k3==k4 and k==k4 and k==k3:
                                          # do some arithmetics on dictionary's values for all four dictionaries
    

    提前多多感谢。

2 个答案:

答案 0 :(得分:1)

如果他们有相同的密钥,那么di1.keys() == di2.keys() == di3.keys() == di4.keys()

keys = di1.keys()
for k in keys:
    # do something with di1[k] di2[k] di3[k] di4[k]

如果他们都没有密钥,请构建密钥的联合集,并使用in检查每个密钥的哪个dict:

keys = set(di1.keys()) | set(di2.keys()) | set(di3.keys()) | set(di4.keys())
for k in keys:
    if k in di1:
        # di1 has the key
    if k in di2:
        # di2 has the key
    if k in di1 and k in di2:
        # do something with di1[k] and di2[k]
    # ...

答案 1 :(得分:0)

1)我假设"获得在四个"之间匹配的那些键。表示您要查找所有四个词典中存在的键。实现此目的的一种方法是取四个sets键的交集。

common_keys = set(d1.keys()) & set(d2.keys()) & set(d3.keys()) & set(d4.keys())

2)迭代公共密钥,并对所有四个字典的字典值进行一些算术运算":

for key in common_keys: 
    for dict in [d1, d2, d3, d4]:
        # do something with dict[key]...

如果您希望避免嵌套循环,也可以使用列表推导,例如:生成一个(键,元组列表)对的列表,然后对其进行操作:

common_keys_vals = [(key, [dict[key] for dict in [d1, d2, d3, d4]])
                    for key in common_keys]