python - 是否可以使用 setdefault 嵌套字典,附加到列表中?

标签 python python-3.x list dictionary setdefault

我想要一个嵌套字典,其中包含附加到子键的值列表。无法识别子 key 。

month = {}
    for row in date:
        month.setdefault(row[1],{row[0]: []})
        month[row[0]].append(row[4])

print(month[main_key][sub_key])

我希望通过附加方法填充值列表。但是,我不断收到 keyError。

所需的输出:

{'row[1]': {'row[0]' :[row[4], row[4], row[4]],
            'row[0]' :[row[4], row[4], row[4]]}}

最佳答案

这是我认为您想要实现的目标的一个简单示例:

>>> rows = [[1,2,3], [1,2,4], [1,3,3], [1,3,5], [2,3,9], [2,3,5]]
>>> ret = {}
>>> for row in rows:
...     ret.setdefault(row[0], {}).setdefault(row[1], []).append(row[2])
...
>>> ret
{1: {2: [3, 4], 3: [3, 5]}, 2: {3: [9, 5]}}

它是如何工作的?对于每行:

  1. 我们在 ret 键中查找 row[0]。如果不存在,我们将 (row[0], {}) 对添加到字典中,{} 是嵌套字典。如果它存在,我们就继续。
  2. row[1]是嵌套字典的键。我们在ret[row[0]](第一个setdefault返回)中查找它:如果它不存在,我们添加一个空列表。
  3. 我们将值 row[2] 添加到列表 ret[row[0]][row[1]]

请记住:

ret.setdefault(row[0], value_if_absent).func()

意思是:

if row[0] not in ret:
    ret[row[0]] = value_if_absent

ret[row[0]].func()

通常,value_if_absent 是一个容器,funcappendextendupdate 之一,...方法。但如果需要,func 也可以是 setdefault 来创建新容器。

关于python - 是否可以使用 setdefault 嵌套字典,附加到列表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55720968/

相关文章:

python - 将字典值相乘并输出到 'list type' 的最快方法

list - SharePoint 列表数据源出现 HTTP 401 "Unauthorized"错误

python-3.x - python 声明值的简单方法

python - 当批量大小=1时批量归一化

Python:For循环在第一次迭代后停止向字典添加项目

python - 使用 python 在 win 10 上切换 "night light"功能

python - 如何在同一图中绘制多个数据框 csv

python - 使用共享包构建 Python 项目的最佳方法是什么?

python - 'int' 对象没有属性 'startswith'

python - 子进程在自己的线程中