2009-09-27 21 views
0

有没有一种简单的方法来创建像php中的关联数组字典?在PHP我可以这样做:自动创建下一个关键在python字典

> $x='a'; 
> while($x<d){ 
>  $arr[]['Letter']=$x; 
>  $x++ 
>  } 

解释器会自动添加一个新的号码变成空方括号“[]” 这样我就可以从$arr[1]['Letter']访问信b

有没有办法做同样的用python?

回答

3

编辑:我很蠢。当然,在Python中有这样做的方法。像这样:

result = [{'Letter': chr(i+97)} for i in range(26)] 

这会给你一个列表。可以用数字索引。 所以result[1]['Letter']会给你'b'

+0

伟大的解决方案:)谢谢 – Chris 2009-09-27 11:06:26

3

在Python中,空括号索引在语法上是无效的,但您可以设想编写一个类, [None]作为一个信号添加一个关键字与一个字典作为其价值和一个递增的整数作为关键。在我为编写这样的课程做出实质性努力之前,我很想知道你想要解决的实际问题,例如, collections.defaultdict不会解决。

+0

作为一个时间我使用defaultdict的解决方案。 – Chris 2009-09-27 11:05:43

0

已经提到,Python默认不支持它。

您可以通过使用字典的长度,这样达到这样的效果:

>>> arr = {'letter':{1:'a'}} 
>>> arr 
{'letter': {1: 'a'}} 
>>> arr['letter'][len(arr['letter'])+1] = 'b' 
>>> arr['letter'][len(arr['letter'])+1] = 'c' 
>>> arr['letter'][len(arr['letter'])+1] = 'd' 
>>> arr 
{'letter': {1: 'a', 2: 'b', 3: 'c', 4: 'd'}} 
>>> 
2

在Python的列表和字典是不同的类型。 PHP有一种类型来规定他们所有的关联数组。如果试图这样的解释

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

或者如果你喜欢它写

我想你想上面的事转化成Python字典的名单,像这样

x = [ dict(Letter=chr(i)) for i in range(ord('a'),ord('f')) ] 

完全没有列表理解

x = [] 
for c in range(ord('a'),ord('f')): 
    d = { 'Letter': chr(c) } 
    x.append(d) 
+0

我想你是第一个得到OP试图实现的人。 – itsadok 2009-09-27 09:24:33