在Python字典中自动创建下一个键

0 投票
4 回答
2966 浏览
提问于 2025-04-15 14:37

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

撰写回答