2013-04-09 179 views
1

即時嘗試實現一個字典,其中密鑰是一個數字< = 10^9和值是一個數字列表。python字典中的索引超出範圍

a=[] 
for i in xrange(n): 
    h,j = raw_input().split() 
    b=int(h) 
    l=int(j) 

    a[b].append(l) 

它給了我一個列表索引超出範圍的錯誤。

+1

'了'是一個空表,任何索引將超出範圍 – askewchan 2013-04-09 15:35:32

+0

字典在哪裏? – 2013-04-09 15:35:34

回答

3

您可以使用collections.defaultdict這裏:

In [15]: from collections import defaultdict 

In [16]: dic=defaultdict(list) 

In [17]: for _ in xrange(4): 
    ....:  h,j=map(int,raw_input().split()) 
    ....:  dic[h].append(j) 
    ....:  
1 10 
1 20 
2 30 
3 5 

In [18]: dic 
Out[18]: defaultdict(<type 'list'>, {1: [10, 20], 2: [30], 3: [5]}) 

,或者使用一個簡單的字典和使用dict.setdefault

In [19]: dic={} #use {} for declaring a new dict 

In [20]: for _ in xrange(4): 
    ....:  h,j=map(int,raw_input().split()) 
    ....:  dic.setdefault(h,[]).append(j) 
    ....:  
1 10 
1 20 
2 30 
3 5 

In [21]: dic 
Out[21]: {1: [10, 20], 2: [30], 3: [5]} 

排序的字典:

詞典不能進行排序,但我們可以得到一個排序的key,value對或只是keys或只是values使用sorted

In [25]: dic={1: [10, 30], 2: [30], 3: [5,50]} 

In [26]: sorted(dic.items(),key=lambda x:sum(x[1])) #sort based on sum of lists 
Out[26]: [(2, [30]), (1, [10, 30]), (3, [5, 50])] 

現在你可以使用這個collections.OrderedDict以前的列表中創建一個orderedDict,因爲它保存在其中的密鑰插入的順序:

In [27]: from collections import OrderedDict 

In [30]: od=OrderedDict(sorted(dic.items(),key=lambda x:sum(x[1]))) 

In [31]: od 
Out[31]: OrderedDict([(2, [30]), (1, [10, 30]), (3, [5, 50])]) 
+0

如何遍歷這個字典?例如,如果我想根據列表中元素的總和進行排序。 – 2013-04-09 15:46:21