Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在dict中附加到Python列表而不必初始化列表?_Python_Loops - Fatal编程技术网

如何在dict中附加到Python列表而不必初始化列表?

如何在dict中附加到Python列表而不必初始化列表?,python,loops,Python,Loops,在PHP中,我可以做到这一点 $a['name'][] = 'el1'; 在Python中,我必须这样做: a = {} a['name'] = [] a['name'].append('el1') 上述方法的问题是,我在迭代时在下一个循环中丢失了a['name']的值,因为我正在将a['name']重新初始化为空列表 有没有什么方法可以在不必先用空列表初始化的情况下将项目附加到列表中?我想你要求的是这样的东西: a = {} if 'name' not in a: a['name

在PHP中,我可以做到这一点

$a['name'][] = 'el1';
在Python中,我必须这样做:

a = {}
a['name'] = []
a['name'].append('el1')
上述方法的问题是,我在迭代时在下一个循环中丢失了
a['name']
的值,因为我正在将
a['name']
重新初始化为空列表


有没有什么方法可以在不必先用空列表初始化的情况下将项目附加到列表中?

我想你要求的是这样的东西:

a = {}

if 'name' not in a:
    a['name'] = []

a['name'].append('el1')

此外,您可能想看看这是否更符合您的目的。

因此,按照您的措辞,不,您只能将
附加到现有的内容上。这就是说,您根本不需要附加到这个,您可以这样做:

a = {'name': ['el1']}
不需要像那样手动创建结构

如果要在尝试附加到列表之前检查密钥是否存在,可以执行以下操作:

a.setdefault('name', []).append('el1')
get
的第二个参数也提供了一个默认值,表示如果
name
不存在,请附加到空列表中。

您可以使用该模块:

使用此设置,模块在第一次访问时初始化为空列表,因此您只需执行以下操作:

 a['name'].append('el1')
不用担心


希望有帮助

字典不会包含重复的键。这是一种方法,不需要查看更多上下文的完整代码,我要说,下面这个不错的Rachel Sanders的优秀答案也提供了有关defaultdict的更多信息。在这两者之间,我想说的是,这取决于你的品味。@Isabella Wilcox如果你能更清楚地回答你到底在寻找什么,也许会有所帮助,但上面的代码并不是你真正想要的
setdefault
a.setdefault(“name”,[])。追加(“el1”)
@kindall I。。。我才意识到OP的要求。每当我看到
.setdefault
,我都会问自己。。。我真的想看到
集合。而不是defaultdict
?您不需要重新分配给
一个['name']
;事实上,这样做是错误的,因为现在您已经用
append
(即
None
)的返回值覆盖了
a['name']
)的值。这可能是Python v3的问题,但上面的方法不起作用,即使它起作用,您仍然必须对要使用的每个列表执行listname=defaultdict(list),这并不能解决这个问题。
 a['name'].append('el1')