2009-09-27 57 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