python - 尝试将字典键检索到列表中时获取 'NoneType' 对象没有属性 'extend' 错误消息

标签 python list dictionary python-3.8

我正在使用 Python 3.8.0,我尝试编写一个函数来提取嵌套字典的所有键并将结果收集到列表中。这是一个例子:

mydict = {"k1":"v1", "k2":"v2", "k3":{"k4":"v4","k5":{"k6":{"k7":"v7","k8":"v8"}}}}

我期望的输出是:

[k1, k2, k3, k4, k5, k7, k8]

这是我定义的递归函数:

def extract_dict_keys(d):
    if isinstance(d, dict):
        result = []
        for k, v in d.items():
            if isinstance(v, dict):
                result.append(k).extend(extract_dict_keys(v))
            else:
                result.append(k)
        return result
    else:
        [None]

但是当我调用 extract_dict_keys(mydict) 时,我收到以下错误消息:

>>> extract_dict_keys(mydict)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 6, in extract_dict_keys
AttributeError: 'NoneType' object has no attribute 'extend'
>>> 

你能指出我的误解吗?我没有看到问题。

最佳答案

result.append(k) 返回 None 它只将 k 添加到列表的末尾

要修复它,您可以将它分成两行

result.append(k)
result.extend(extract_dict_keys(v)) 

关于python - 尝试将字典键检索到列表中时获取 'NoneType' 对象没有属性 'extend' 错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61841581/

相关文章:

python - 从 groupby 索引中的拆分字符串聚合值

python - Scikit Learn 多标签分类 : ValueError: You appear to be using a legacy multi-label data representation

python - 什么时候应该使用 list.count(0),如何打折 "False"项目?

Hibernate:一对多关系中集合的空索引列

Java 解码 JSON

python - 将一个 python 字典中的键映射到另一个字典的确切值

java - python中处理excel文件的最佳库是什么?

python - 创建一个以字母表字母为关键的字典?

python - 将匹配值更改为新值 Python3

python - 当键是线程 ID 时,Python 字典是线程安全的吗?