我在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']有什么问题?为什么语句表现不同?
该.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)