1

我在 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'] 的理解和期望有什么问题?为什么这些语句的行为不同?

4

2 回答 2

6

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

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

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

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

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

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

lst = lst + ['val']
于 2013-06-05T08:49:28.847 回答
0

append就地运作。但是,您可以在这种情况下使用 setdefault :

hash.setdefault(key, []).append(val)
于 2013-06-05T08:56:21.630 回答