在Python字典中自动创建下一个键
在PHP中,有没有简单的方法可以创建像字典一样的关联数组?在PHP里,我可以这样做:
> $x='a';
> while($x<d){
> $arr[]['Letter']=$x;
> $x++
> }
解释器会自动在空的方括号“[]”里添加一个新的数字,所以我可以通过 $arr[1]['Letter']
来访问字母 b
,等等。
那在Python中有没有办法做到同样的事情呢?
4 个回答
2
在Python中,列表和字典是两种不同的类型。而在PHP中,只有一种类型可以搞定所有,那就是关联数组。
我觉得你想做的事情在Python中可以理解为一个字典的列表,像这样:
x = [ dict(Letter=chr(i)) for i in range(ord('a'),ord('f')) ]
如果你在解释器中试试这个:
>>> x = [ dict(Letter=chr(i)) for i in range(ord('a'),ord('f')) ]
>>> x
[{'Letter': 'a'}, {'Letter': 'b'}, {'Letter': 'c'}, {'Letter': 'd'}, {'Letter': 'e'}]
>>> x[0]
{'Letter': 'a'}
>>> x[1]
{'Letter': 'b'}
>>> x[1]['Letter']
'b'
>>>
或者如果你更喜欢不使用列表推导式,完整写出来的话:
x = []
for c in range(ord('a'),ord('f')):
d = { 'Letter': chr(c) }
x.append(d)
3
在Python中,使用空括号来索引是语法上不合法的。不过,你可以想象一下,编写一个类,让它接受比如[None]
这样的输入,作为一个信号,去添加一个新的键,值是一个字典,而这个键是一个递增的整数。在我花费大量精力去编写这样一个类之前,我想先了解一下,你真正想解决的是什么问题,比如说collections.defaultdict
就能解决的问题。
3
编辑:我真是傻。当然在Python中有办法做到这一点。就像这样:
result = [{'Letter': chr(i+97)} for i in range(26)]
这样你就会得到一个列表。这个列表可以用数字来索引。所以 result[1]['Letter']
会给你 'b'
。