Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否可以使用setdefault将嵌套字典附加到列表中?_Python_Python 3.x_List_Dictionary_Setdefault - Fatal编程技术网

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很乐意帮忙!顺便说一句,回答你自己的问题是不被禁止的。我不知道为什么你的答案被删除了。检查。