使用Pythonic方式创建嵌套字典

4

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

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}}

我可以开始使用循环,但我不认为这是必要的。 当然,在此之后,我需要再次将这些字典展平。


你必须使用循环,字典推导仍然是一种循环类型,在我看来。 - Chris_Rands
3个回答

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

2
值得注意的是,在Python 3.7之前,这种排序是不能保证的。 - Chris_Rands

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}}

-1
在我看来,更符合“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])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接