【问题标题】:Creating a nested dictionary where inner values are lists创建一个嵌套字典,其中内部值是列表
【发布时间】:2017-06-01 20:26:50
【问题描述】:

所以我想创建一个嵌套的列表字典,其中内部值是一个允许重复的列表:

d = {'45678':{'ant':['N4', 'N4', 'P3', 'P3']}}

这是我目前所拥有的,但不知道如何将列表附加到内部值:

d={}
with open(file_path, 'r') as f:
    for l in f.readlines()[4:]:
        peaks = l.split()
        if '1' in peaks[5]:
            d.setdefault(peaks[0], {})['ant'] = [peaks[7]]

返回:

{'20065037': {'ant': ['N4']}}

我的问题是如何在嵌套字典中附加一个列表作为内部值?

【问题讨论】:

  • 使用list.append() 方法。 d.setdefault(peaks[0], {})['ant'].append(peaks[7])
  • 输入文件是什么样的?我不确定其他值应该来自哪里。在 Python 中附加到列表就像 l.append(whatever) 一样简单。
  • d.setdefault(peaks[0], {})['ant'] = [peaks[7]]peaks[7] 周围的方括号不会使其成为一个列表吗?
  • @Kasramvd。您可能还想在内部字典中使用setdefault
  • @e9e9s 是的,[peaks[7]] 是一个列表。但这似乎不是您遇到的问题。

标签: python python-3.x dictionary nested


【解决方案1】:

我想我可能已经弄清楚你想要做什么了。

这有帮助吗?

d.setdefault(peaks[0], {}).setdefault('ant', []).append(peaks[7])

如果不是,请说明文件的外观或其他有关您要执行的操作的信息。

【讨论】:

  • 不赞成你会暗示我的回答也有问题:)
【解决方案2】:

假设您的代码基本上是正确的(就处理文件而言),您应该在内部字典中使用setdefault,在列表中使用append

d={}
with open(file_path, 'r') as f:
    for l in f.readlines()[4:]:
        peaks = l.split()
        if '1' in peaks[5]:
            d.setdefault(peaks[0], {}).setdefault('ant', []).append(peaks[7])

目前,您总是使用[peaks[7]] 创建一个新列表,而不是提供附加选项。

【讨论】:

  • 是的,就是这样。我在弄清楚如何在内部字典上设置 setdefault 时遇到了麻烦。将在 6 分钟内投票 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-09
  • 1970-01-01
  • 2021-06-13
  • 2020-07-29
  • 2021-04-04
  • 2021-02-13
相关资源
最近更新 更多