Python 是否可以使用setdefault将嵌套字典附加到列表中?
我想要一个嵌套字典,其中包含附加到子键的值列表。无法识别子密钥Python 是否可以使用setdefault将嵌套字典附加到列表中?,python,python-3.x,list,dictionary,setdefault,Python,Python 3.x,List,Dictionary,Setdefault,我想要一个嵌套字典,其中包含附加到子键的值列表。无法识别子密钥 month={} 对于输入日期的行: month.setdefault(第[1]行,{0]行:[]} 月份[第[0]行]。追加(第[4]行) 打印(月份[主关键字][子关键字]) 我希望通过appending方法填充一个值列表。然而,我一直得到一个关键的错误 所需输出: {'row[1]': {'row[0]' :[row[4], row[4], row[4]], 'row[0]' :[row[4], ro
month={}
对于输入日期的行:
month.setdefault(第[1]行,{0]行:[]}
月份[第[0]行]。追加(第[4]行)
打印(月份[主关键字][子关键字])
我希望通过appending方法填充一个值列表。然而,我一直得到一个关键的错误
所需输出:
{'row[1]': {'row[0]' :[row[4], row[4], row[4]],
'row[0]' :[row[4], row[4], row[4]]}}
让我们按照for循环块中的语句进行操作 第一个是:
month.setdefault(row[1], {row[0]: []})
这将为键行[1]
设置一个值{row[0]:[]}
(字典),其中键未在月份插入
下一句话是:
month[row[0]].append(row[4])
它使用键行[0]
将行[4]
追加到从月份检索到的列表中。
这一行应该是错误的,因为即使键存在于month
中,它所对应的值也是字典而不是列表
该行应写为:
month[row[1]][row[0]].append(row[4])
month[row[1]]
检索与键行[1]
配对的词典,然后对其进行索引,以访问与行[0]
配对的列表。以下是一个简单的示例,我认为您正在尝试实现:
>>> 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]}}
它是如何工作的?对于每个行
:
我们在ret
键中查找行[0]
。如果它不存在,我们将对(行[0],{})
添加到dict中,{}
作为嵌套dict。如果它存在,我们继续
值row[1]
是嵌套dict的键。我们在ret[row[0]]
中查找它(第一个setdefault
return):如果它不存在,我们添加一个空列表
我们将值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\u if\u缺席
是一个容器,func
是append
,extend
,update
。。。方法。但是func
也可以是一个setdefault
来创建一个新的容器,如果需要的话。。我想设置固定的关键点,这样两个关键点的设置默认值都会起作用。尽管如此,还是非常感谢你!我应该说清楚我的愿望输出,我的坏。谢谢巴德!我已经知道了,但有人删除了我的答案。):要习惯这里的规则。尽管如此,还是非常感谢你,你的解释让我看得更清楚了。@Susan很乐意帮忙!顺便说一句,回答你自己的问题是不被禁止的。我不知道为什么你的答案被删除了。检查。