关于合并字典的问题
比如:s1={"a":1,"b":2}
s2={"a":21,"c":3}
s3={"a":51,"b":22}
s4={"a":11,"d":4}
s5={"e":5}
要求合并后,所有字典长度一致,none项用空补齐
s1={"a":1,"b":2,'c':"",'d':"","e":""}
s2={"a":21,"b":"","c":3,'d':"","e":""}
s3={"a":51,"b":22,"c":"",'d':"","e":""}
s4={"a":11,"b":"","c":"","d":4,"e":""}
s5={"a":"","b":"",'c':"",'d':"","e":5}
本帖最后由 歌者文明清理员 于 2023-4-29 09:38 编辑
keys = []
for i in (s1, s2, s3, s4, s5):
keys.extend(list(i))
for i in (s1, s2, s3, s4, s5):
for key in keys:
if key not in i:
i = '' 您可以使用以下方法合并这些字典。这里我们创建了一个函数merge_dicts来实现这个功能。这个函数接受一个字典列表作为输入,然后返回一个合并后的字典列表。
def merge_dicts(dict_list):
merged_keys = set()
for d in dict_list:
merged_keys.update(d.keys())
result = []
for d in dict_list:
new_dict = {}
for key in merged_keys:
new_dict = d.get(key, '')
result.append(new_dict)
return result
s1 = {"a": 1, "b": 2}
s2 = {"a": 21, "c": 3}
s3 = {"a": 51, "b": 22}
s4 = {"a": 11, "d": 4}
s5 = {"e": 5}
dict_list =
merged_dicts = merge_dicts(dict_list)
for d in merged_dicts:
print(d)
输出结果:
{'a': 1, 'b': 2, 'c': '', 'd': '', 'e': ''}
{'a': 21, 'b': '', 'c': 3, 'd': '', 'e': ''}
{'a': 51, 'b': 22, 'c': '', 'd': '', 'e': ''}
{'a': 11, 'b': '', 'c': '', 'd': 4, 'e': ''}
{'a': '', 'b': '', 'c': '', 'd': '', 'e': 5}
这个函数首先找到所有字典中出现的键,然后为每个字典创建一个新的字典,用空字符串填充不存在的键。最后,将这些新字典添加到结果列表中。 isdkz 发表于 2023-4-29 09:34
您可以使用以下方法合并这些字典。这里我们创建了一个函数merge_dicts来实现这个功能。这个函数接受一 ...
太迅速了,我刚发完贴啊 再一刷页面over了 wp231957 发表于 2023-4-29 09:36
太迅速了,我刚发完贴啊 再一刷页面over了
他是chatgpt,专业于将简单的问题复杂化 本帖最后由 isdkz 于 2023-4-29 09:41 编辑
我们可以进一步简化代码,将整个操作放在一个列表推导中:
s1={"a":1,"b":2}
s2={"a":21,"c":3}
s3={"a":51,"b":22}
s4={"a":11,"d":4}
s5={"e":5}
dict_list =
merged_keys = {k for d in dict_list for k in d.keys()}
merged_dicts = [{key: d.get(key, '') for key in merged_keys} for d in dict_list]
for d in merged_dicts:
print(d)
输出结果:
{'a': 1, 'b': 2, 'c': '', 'd': '', 'e': ''}
{'a': 21, 'b': '', 'c': 3, 'd': '', 'e': ''}
{'a': 51, 'b': 22, 'c': '', 'd': '', 'e': ''}
{'a': 11, 'b': '', 'c': '', 'd': 4, 'e': ''}
{'a': '', 'b': '', 'c': '', 'd': '', 'e': 5}
这种写法将整个操作放在一个列表推导中,省略了定义和调用函数的步骤。虽然代码更简洁,但可读性可能会受到一定影响。所以在实际应用中,请根据您的需求和团队的编码风格来选择合适的方法。 isdkz 发表于 2023-4-29 09:34
您可以使用以下方法合并这些字典。这里我们创建了一个函数merge_dicts来实现这个功能。这个函数接受一 ...
我结果咋和你的不一致
D:\wpp>D:/Python37/python.exe d:/wpp/test10.py
{'e': '', 'd': '', 'a': 1, 'b': 2, 'c': ''}
{'e': '', 'd': '', 'a': 21, 'b': '', 'c': 3}
{'e': '', 'd': '', 'a': 51, 'b': 22, 'c': ''}
{'e': '', 'd': 4, 'a': 11, 'b': '', 'c': ''}
{'e': 5, 'd': '', 'a': '', 'b': '', 'c': ''} wp231957 发表于 2023-4-29 09:36
太迅速了,我刚发完贴啊 再一刷页面over了
GPT速度{:5_97:} wp231957 发表于 2023-4-29 09:38
我结果咋和你的不一致
D:\wpp>D:/Python37/python.exe d:/wpp/test10.py
这个代码用了个集合,顺序有点随机 wp231957 发表于 2023-4-29 09:38
我结果咋和你的不一致
D:\wpp>D:/Python37/python.exe d:/wpp/test10.py
为了保持原始顺序,我们可以使用列表来收集所有的键,同时检查每个新添加的键是否已经在列表中。这是一个修改后的简洁代码:
dict_list =
merged_keys = []
for d in dict_list:
for k in d.keys():
if k not in merged_keys:
merged_keys.append(k)
merged_dicts = [{key: d.get(key, '') for key in merged_keys} for d in dict_list]
for d in merged_dicts:
print(d)
输出结果:
{'a': 1, 'b': 2, 'c': '', 'd': '', 'e': ''}
{'a': 21, 'b': '', 'c': 3, 'd': '', 'e': ''}
{'a': 51, 'b': 22, 'c': '', 'd': '', 'e': ''}
{'a': 11, 'b': '', 'c': '', 'd': 4, 'e': ''}
{'a': '', 'b': '', 'c': '', 'd': '', 'e': 5}
现在的代码将保持键的原始顺序。请注意,虽然代码更简洁,但可读性可能会受到一定影响。所以在实际应用中,请根据您的需求和团队的编码风格来选择合适的方法。 isdkz 发表于 2023-4-29 09:43
为了保持原始顺序,我们可以使用列表来收集所有的键,同时检查每个新添加的键是否已经在列表中。这是一个 ...
收到 wp231957 发表于 2023-4-29 09:47
收到
最佳答案{:10_258:}{:10_244:}{:10_324:}
页:
[1]