当我们需要在多个字典中查找公共键时,我们可以使用set(集合)和字典的keys(键)方法结合起来实现。具体步骤如下:
- 定义一个空的集合new_set和一个包含所有字典的列表dict_list。
- 使用for循环遍历字典列表dict_list,在每个字典中获取键集,将其添加到new_set集合中。
- 通过set的交集操作,获取所有字典中共有的键集合result_set。
- 初始化一个字典result_dict,使用for循环遍历字典列表dict_list,获取每个字典的键值对。
- 判断键是否在result_set中,如果在,则将该键和对应的值添加到result_dict中。
- 返回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}