将多个字典合并到一个嵌套字典(Python)

2024-06-11 00:12:54 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有两本字典:

animal = {
  "CA": "Grizzly Bear",
  "ID": "Appaloosa",
  "NY": 'Beaver'
}

flower = {
  "CA": "tulip",
  "ID": "syringa",
  "NY": 'rose'
}

如何将这两个词典组合成状态级别为>;的嵌套词典;动物/花卉>;价值例如:

dict3 = {'CA': {'animal':'Grizzly Bear','flower':'tulip'},
         'ID': {'animal':'Appaloosa','flower':'syringa'},
         'NY': {'animal':'Beaver','flower':'rose'}}
print(dict3)

上面的代码是手动工作的,但我想知道一种更有效的方法来处理任意数量的状态。我想我会用循环重新排列键/值,但我想知道是否有一种有效的方法

谢谢


Tags: gtid状态词典cabearflowerbeaver
0条回答
网友
1楼 · 发布于 2024-06-11 00:12:54

看来最有效的方法是

keys = set(animal.keys()).update(flower.keys())
dict3 = {key: dict(animal=animal.get(key), flower=flower.get(key))
         for key in keys}

它适用于O(N),其中N是dicts的大小之和

还要注意这是如何处理丢失的花或动物的情况的:dict将保持None。这可能是您想要的,也可能不是,这取决于您的用例

网友
2楼 · 发布于 2024-06-11 00:12:54

试试这个:

animal = { "CA": "Grizzly Bear", "ID": "Appaloosa", "NY": 'Beaver' }

flower = { "CA": "tulip", "ID": "syringa", "NY": 'rose' }

dict3 = { }
for k in animal.keys() & flower.keys():
    dict3[k] = {"animal":animal[k], "flower":flower[k]}

print(dict3)

最好的(Pythonic)方法是使用dict comprehension

print({k:{"animal":animal[k], "flower":flower[k]} for k in animal.keys() & flower.keys()})

输出:

{'CA': {'animal': 'Grizzly Bear', 'flower': 'tulip'}, 'ID': {'animal': 'Appaloosa', 'flower': 'syringa'}, 'NY': {'animal': 'Beaver', 'flower': 'rose'}}

注意:

我用&在两本字典中得到了intersections个键。使用这个,我们确保使用两个dict中存在的键(用于生成新dict)(否则,您可能会得到KeyError

网友
3楼 · 发布于 2024-06-11 00:12:54

您可以使用此dict理解,它与键相交:

>>> {k: {'animal': animal[k], 'flower': flower[k]} for k in animal.keys() & flower.keys()}
{'CA': {'animal': 'Grizzly Bear', 'flower': 'tulip'}, 'NY': {'animal': 'Beaver', 'flower': 'rose'}, 'ID': {'animal': 'Appaloosa', 'flower': 'syringa'}}

相关问题 更多 >