在声明语句列表= []中将项目追加到python列表中。append(val)是NoneType

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


翻翻过去那场雪
浏览 184回答 2
2回答

繁星淼淼

该.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')>>> hashdefaultdict(<type 'list'>, {'a': ['A']})如果要返回添加了额外项目的新列表,请使用串联:lst = lst + ['val']

侃侃尔雅

append就地操作。但是,在这种情况下,您可以使用setdefault:hash.setdefault(key,&nbsp;[]).append(val)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python