将项添加到声明语句list = [] .append(val)中的python列表是NoneType

Ash*_*men 1 python

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

hash = {}
key = 'a'
val = 'A'
hash[key] = hash.get(key, []).append(val)
Run Code Online (Sandbox Code Playgroud)

hash.get(key, [])回报[]和我期待那本词典是{'a': ['A']}.但字典设置为{'a': None}.在进一步查看时,我意识到这是由于python列表而发生的.

list_variable = []
list_variable.append(val)
Run Code Online (Sandbox Code Playgroud)

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

list_variable = [].append(val)
type(list_variable)
<type 'NoneType'> 
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ers 6

.append()函数在适当的位置改变列表,因此总是返回None.这是正常和预期的行为.您不需要具有返回值,因为列表本身已经更新.

使用该dict.setdefault()方法设置默认的空列表对象:

>>> hash = {}
>>> hash.setdefault('a', []).append('A')
>>> hash
{'a': ['A']}
Run Code Online (Sandbox Code Playgroud)

您可能也对该collections.defaultdict课程感兴趣:

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

如果要返回添加了额外项目的列表,请使用连接:

lst = lst + ['val']
Run Code Online (Sandbox Code Playgroud)