【问题标题】:Pythonic way to create a nested dictionary创建嵌套字典的 Pythonic 方法
【发布时间】:2020-10-19 18:42:27
【问题描述】:

我正在寻找一种 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}}

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

【问题讨论】:

  • 你必须使用循环,字典理解仍然是一种循环 IMO

标签: python list dictionary nested


【解决方案1】:
>>> {k: {va: vb} for k, (va, vb) in zip(a, b.items())}
{3: {'a': 1}, 4: {'b': 2}}

【讨论】:

  • 值得注意的是,在 Python 3.7 之前,不保证这种排序
【解决方案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}}

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多