2012-01-31 81 views
0

我有以下形式的字典:升序排序的值

d = { 'someText': floatNumber }

floatNumber是一個劃時代的時間戳。我試圖組織這樣的時間在升序。

例子:{'someText':0000001, 'someText1':0000002, and so on}

我能想到這樣做的唯一方法是手動for k,v in dict.items()循環,然後將其整理成一個列表,但可能需要較長的時間。任何幫助將不勝感激。

+2

你的意思是用'[ 'someText':0000001,...]'?那應該是什麼,一個清單? – 2012-01-31 14:03:27

+2

請勿使用保留字'dict'作爲變量。 – 2012-01-31 14:04:20

+0

但'[k1:v1,k2:v2,...]'語法既不是列表也不是字典。 – 2012-01-31 14:12:18

回答

4

也許你想:

import operator 
values = sorted(d.items(), key=operator.itemgetter(1)) 

這將產生一個元組的排序列表,像

[('someText', 1), ('someText', 2), ...] 

詞典不能進行排序,所以你必須使用另一種數據結構來存儲你的密鑰 - 值對。

+0

完成這項工作。請問爲什麼'1'被傳入'itemgetter()'? – Federer 2012-01-31 14:35:16

+2

@malcmcmul:'d.items()'的每個元素都是一個元組,其中包含第一個鍵和第二個元素的值。列表和元組的索引是基於0的。因此,元組中的值的索引(您想要排序的)是'1'。 – 2012-01-31 14:37:35

0
from operator import itemgetter 

d = {'foo':1, 'bar':3, 'baz':2} 
l = [(k, v) for k, v in d.items()] 
s = sorted(l, key=itemgetter(1)) 

# s == [('foo', 1), ('baz', 2), ('bar', 3)] 

更多排序:http://wiki.python.org/moin/HowTo/Sorting

編輯:

改進版(感謝您的評論):

from operator import itemgetter 

d = {'foo':1, 'bar':3, 'baz':2} 
s = sorted(d.items(), key=itemgetter(1)) 

# s == [('foo', 1), ('baz', 2), ('bar', 3)] 
+2

'.items()'已經返回元組列表。 – 2012-01-31 14:07:54

0

首先,默認情況下,字典是無序。在構建數據集時,您可能需要使用列表並插入到適當的位置。否則,請使用sorted函數。

sorted(dict.iteritems(), key=lambda (x, y): y) 
1

order dictionary可以用來存儲在有序的條目:

>>> from collections import OrderedDict 
>>> d = OrderedDict(sorted(dict.items(), key=lambda item: item[1]))