我在 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']
