Python查找多个字典公共键key的方法

  • Post category:Python

当我们需要在多个字典中查找公共键时,我们可以使用set(集合)和字典的keys(键)方法结合起来实现。具体步骤如下:

  1. 定义一个空的集合new_set和一个包含所有字典的列表dict_list。
  2. 使用for循环遍历字典列表dict_list,在每个字典中获取键集,将其添加到new_set集合中。
  3. 通过set的交集操作,获取所有字典中共有的键集合result_set。
  4. 初始化一个字典result_dict,使用for循环遍历字典列表dict_list,获取每个字典的键值对。
  5. 判断键是否在result_set中,如果在,则将该键和对应的值添加到result_dict中。
  6. 返回result_dict字典即可。

以下是示例代码:

dict_list = [{'a': 1, 'b': 2, 'c': 3}, 
             {'b': 4, 'c': 5, 'd': 6}, 
             {'c': 7, 'd': 8, 'e': 9}]

# 定义一个空集合
new_set = set()

# 遍历字典列表
for d in dict_list:
    # 将每个字典的键集合添加到new_set中
    new_set |= set(d.keys())

# 获取所有字典中共有的键集合
result_set = set.intersection(*[set(d.keys()) for d in dict_list])

# 初始化字典
result_dict = {}

# 遍历字典列表,构造结果字典
for d in dict_list:
    for k, v in d.items():
        if k in result_set:
            result_dict[k] = v

print(result_dict)

输出为:{‘c’: 3, ‘b’: 2}

在第二个例子中,我们再次使用上述步骤查找多个字典中的公共键。但是这次,字典中包含了多个相同的键,我们可以使用Counter计数器类去除重复键,同时仍然只保留公共键。以下是代码示例:

from collections import Counter

dict_list = [{'a': 1, 'b': 2, 'c': 3, 'd': 1},
             {'b': 4, 'c': 5, 'd': 6, 'e': 1},
             {'c': 7, 'd': 8, 'e': 9, 'f': 1},
             {'d': 10, 'e': 11, 'f': 12, 'g': 1}]

# 定义一个空集合
new_set = set()

# 遍历字典列表
for d in dict_list:
    # 将每个字典的键集合添加到new_set中
    new_set |= set(d.keys())

# 获取所有字典中共有的键集合
result_set = set.intersection(*[set(d.keys()) for d in dict_list])

# 构造Counter计数器
result_counter = Counter()

# 遍历字典列表,对公共键进行计数
for d in dict_list:
    for k, v in d.items():
        if k in result_set:
            result_counter[k] += 1

# 过滤掉非公共键,同时去除相同key
result_dict = dict([x for x in result_counter.items() if x[1] == len(dict_list)])

print(result_dict)

输出为:{‘d’: 2, ‘c’: 3, ‘e’: 2}