【问题标题】:Method for Creating a Nested Dictionary from a List of Keys从键列表创建嵌套字典的方法
【发布时间】:2013-12-04 22:04:40
【问题描述】:

我想从包含键的任意元组/列表创建一个空的嵌套字典。我正在尝试在 Python 中找到一种简单的方法来执行此操作。它看起来像是集合 defaultdict 应该处理的东西,但我似乎无法弄清楚。

keys = ('a', 'b', 'c')

还有一本最终看起来像这样的字典:

d = {
    'a': {
          'b': {
                'c': {}
               }
          }
     }

【问题讨论】:

  • 字典是否应该有一个不在元组中的键的条目?如果没有,defaultdict 可能不是要走的路。如果是这样,请查看这个出色的递归 defaultdict 构造函数:stackoverflow.com/questions/19189274/…
  • 这太棒了,但我不想做类似d[a][b][c] 的事情来创建它,我想把它作为一个单行理解来做,因为会有任意数量的键.
  • 我希望有一个单行程序可以预先填充递归 defaultdict 以便像 keys 这样的调用会按您的预期工作 - 真正的问题是 defaultdict 是否返回某些东西的行为d['foobar'] 是你想要的还是不想要的。

标签: python dictionary


【解决方案1】:

我想你可以使用reduce

def subdict(sub, key):
    return { key: sub }

d = reduce(subdict, reversed(keys), {})

(在 Python 3 中,它是 functools.reduce。)

【讨论】:

    【解决方案2】:
    def nested_dict(keys):
          if len(keys) == 1:
               return {keys[0]: {}}
          return {keys[0]: nested_dict(keys[1:])}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-04
      • 2021-11-20
      • 2021-04-19
      • 2018-01-16
      • 1970-01-01
      • 2020-10-22
      相关资源
      最近更新 更多