创建嵌套字典的 Pythonic 方法

我正在寻找一种从列表和字典创建嵌套字典的 Pythonic 方式。以下两个语句产生相同的结果:


a = [3, 4]

b = {'a': 1, 'b': 2}


c = dict(zip(b, a))

c = {k: v for k, v in zip(b, a)}

输出是:


{3: 'a', 4: 'b'}

期望的结果是:


{3: {'a': 1}, 4: {'b': 2}}

我可以开始使用循环,但我认为没有必要。当然,之后我将需要再次压平那些字典。


千巷猫影
浏览 111回答 3
3回答

12345678_0001

>>> {k: {va: vb} for k, (va, vb) in zip(a, b.items())}{3: {'a': 1}, 4: {'b': 2}}

紫衣仙女

像这样:a = [3, 4]b = {'a': 1, 'b': 2}c = {i: {k:b[k]} for i,k in zip(a,b)}print(c)输出:{3: {'a': 1}, 4: {'b': 2}}

慕标5832272

在我看来,一种更“Pythonic”的方式是使用更具描述性的变量名和dict()构造函数:keys = [3, 4]orig_dict = {'a': 1, 'b': 2}nested_dict = {key: dict([item]) for (key, item) in zip(keys, orig_dict.items())}另一种方法,使用中间可迭代:sub_dicts = [dict([item]) for item in orig_dict.items()]nested_dict = dict(zip(keys, sub_dicts))最后,在这种情况下,只使用循环似乎就好了:nested_dict = {}for key, item in zip(keys, orig_dict.items()):    nested_dict[key] = dict([item])
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python