Skip to main content
 首页 » 编程设计

python之在声明语句 list = [].append(val) 中将项目附加到 python 列表是 NoneType

2025年05月04日28fff_TT

我在 python 中使用链式方法时遇到了这种情况。 假设,我有以下代码

hash = {} 
key = 'a' 
val = 'A' 
hash[key] = hash.get(key, []).append(val) 

hash.get(key, []) 返回一个 [] 并且我期望字典是 {'a': ['A']} .但是字典设置为 {'a': None}。 在进一步查找时,我意识到这是由于 python 列表而发生的。

list_variable = [] 
list_variable.append(val) 

将 list_variable 设置为 ['A'] 但是,在初始声明中设置一个列表

list_variable = [].append(val) 
type(list_variable) 
<type 'NoneType'>  

我对 list_variable 应该包含 ['A'] 的理解和期望有什么问题 为什么语句的行为不同?

请您参考如下方法:

.append() 函数就地 更改列表,因此总是返回None。这是正常的和预期的行为。您不需要有返回值,因为列表本身已经更新。

使用 dict.setdefault() method设置一个默认的空列表对象:

>>> hash = {} 
>>> hash.setdefault('a', []).append('A') 
>>> hash 
{'a': ['A']} 

您可能还对 collections.defaultdict class 感兴趣:

>>> from collections import defaultdict 
>>> hash = defaultdict(list) 
>>> hash['a'].append('A') 
>>> hash 
defaultdict(<type 'list'>, {'a': ['A']}) 

如果您想返回一个添加了额外项目的新列表,请使用连接:

lst = lst + ['val']