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

Python 将多个字典与特定值进行比较,python,dictionary,Python,Dictionary,我有四本长度相近的词典 我想: 获取四个键之间匹配的键 迭代每个字典中的某个值,稍后我将对其进行比较并执行一些算术运算 我已经使用嵌套循环(四个循环)实现了这一点,但这看起来根本没有效率。我想让这段代码更加高效和优雅 我希望在不执行嵌套循环的情况下执行此操作: d1 = {1:18:[['28','Y','N'],['108','A','M'],...] d2,d3 and d4 are the same thing expect different values but some will

我有四本长度相近的词典

我想:

  • 获取四个键之间匹配的键

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

  • 我已经使用嵌套循环(四个循环)实现了这一点,但这看起来根本没有效率。我想让这段代码更加高效和优雅

    我希望在不执行嵌套循环的情况下执行此操作:

     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
    

    事先非常感谢。

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

    如果它们并非都有键,则使用中的
    ,构建键的并集,并检查每个键都有哪个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) 我假设“获取四个字典中匹配的键”意味着您希望找到所有四个字典中都存在的键。实现这一点的一种方法是取四个关键点的交点

    2) 迭代公共键并“对所有四个字典的字典值进行一些算术运算”:

    如果希望避免嵌套循环,也可以使用列表理解,例如生成(键、元组列表)对的列表并在以后对其进行操作:

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

    1个字母的变量名会让代码变得混乱。d1和di1一样吗?我不明白这一点:''迭代每个字典中的某个值,稍后我将进行比较,并执行一些算术运算''?请举个例子,这是什么意思?
    common_keys = set(d1.keys()) & set(d2.keys()) & set(d3.keys()) & set(d4.keys())
    
    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]