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)
它給了我一個列表索引超出範圍的錯誤。
即時嘗試實現一個字典,其中密鑰是一個數字< = 10^9和值是一個數字列表。python字典中的索引超出範圍
a=[]
for i in xrange(n):
h,j = raw_input().split()
b=int(h)
l=int(j)
a[b].append(l)
它給了我一個列表索引超出範圍的錯誤。
您可以使用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])])
如何遍歷這個字典?例如,如果我想根據列表中元素的總和進行排序。 – 2013-04-09 15:46:21
'了'是一個空表,任何索引將超出範圍 – askewchan 2013-04-09 15:35:32
字典在哪裏? – 2013-04-09 15:35:34