gpt4 book ai didi

python - 合并到保留不同值的字典

转载 作者:行者123 更新时间:2023-11-28 22:52:43 25 4
gpt4 key购买 nike

我是 python (python 3.2) 的新手,我一直在努力解决一个难题。我有两本带有列表的字典:

d1 = {
'mammals': ['dog', '5', 'cat', '4', 'mouse', '4', 'bat', '3'],
'bird': ['robin', '8', 'bluejay', '6', 'goose', '5', 'cardinal', '5']
}

d2 = {
'mammals': ['cow', '5', 'horse', '4', 'cat', '4', 'dog', '3', 'beaver', '3'],
'bird': ['bluejay', '9', 'goose', '8', 'eagle', '8', 'robin', '7', 'duck', '6', 'cardinal', '5']
}

在每个字典中,名称-数字对(例如,'dog', '5')对应于原始数据库中存在的所述项目的实例数量。

我需要的是以保留数量信息的方式合并两个字典(同样,在示例中,新字典将包含 'dog', '5', '3' .这样合并后的字典看起来有点像(我不一定致力于嵌套字典。我这样写是为了便于可视化。重要的是要保留信息):

d_merged = { 
'mammals': [{'dog': ['5', '3']}, {'cat': ['4', '4']}, {'mouse': '4'}, {'bat': '3'} , {'cow': '5'},
{'horse': '4'}, {'beaver': '3'}],
'bird': [{'robin': ['8', '7']}, {'bluejay': ['6', '9']}, {'goose': ['5','8']}, {'cardinal': ['5',
'5']}, {'eagle': '8'}, {'duck', '6'}]
}

我尝试过元组、嵌套字典和其他可能性的各种方法,但结果一团糟。如果有人能指出我解决这个问题的好方向,那将意义重大。非常感谢你

最佳答案

最可读的方法可能如下所示:

output = {}
for key in d1.keys():
output[key] = {}
lst = d1[key]
for name, count in (lst[i:i+2] for i in range(0, len(lst), 2)):
output[key][name] = (int(count),)
for key in d2.keys():
if key not in output:
output[key] = {}
lst = d2[key]
for name, count in (lst[i:i+2] for i in range(0, len(lst), 2)):
if name in output[key].keys():
output[key][name] += (int(count),)
else:
output[key][name] = (int(count),)

在难以理解的字典推导中,可以分两步完成

d = {k: {a: int(b) for a, b in (v[i:i+2] for i in range(0, len(v), 2))} 
for k, v in d.items()}

将它们变成字典的字典,例如

{'mammals': {'cat': 4, 'cow': 5, 'dog': 3, 'beaver': 3, 'horse': 4}, 
'bird': {'goose': 8, 'duck': 6, 'eagle': 8, 'bluejay': 9, 'robin': 7, 'cardinal': 5}}

然后

output = {k1: {k2: (d1.get(k1, {}).get(k2), d2.get(k1, {}).get(k2)) 
for k2 in set(list(d1.get(k1, {}).keys()) + list(d2.get(k1, {}).keys()))}
for k1 in set(list(d1.keys()) + list(d2.keys()))}

将两者结合起来。

请注意,即使在两个级别上有不同的键(例如添加 d1['reptiles'] = {'lizard': 10}),这些方法都有效。

关于python - 合并到保留不同值的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20198073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com