我有以下形式的字典:升序排序的值
d = { 'someText': floatNumber }
凡floatNumber
是一個劃時代的時間戳。我試圖組織這樣的時間在升序。
例子:{'someText':0000001, 'someText1':0000002, and so on}
我能想到這樣做的唯一方法是手動for k,v in dict.items()
循環,然後將其整理成一個列表,但可能需要較長的時間。任何幫助將不勝感激。
我有以下形式的字典:升序排序的值
d = { 'someText': floatNumber }
凡floatNumber
是一個劃時代的時間戳。我試圖組織這樣的時間在升序。
例子:{'someText':0000001, 'someText1':0000002, and so on}
我能想到這樣做的唯一方法是手動for k,v in dict.items()
循環,然後將其整理成一個列表,但可能需要較長的時間。任何幫助將不勝感激。
也許你想:
import operator
values = sorted(d.items(), key=operator.itemgetter(1))
這將產生一個元組的排序列表,像
[('someText', 1), ('someText', 2), ...]
詞典不能進行排序,所以你必須使用另一種數據結構來存儲你的密鑰 - 值對。
完成這項工作。請問爲什麼'1'被傳入'itemgetter()'? – Federer 2012-01-31 14:35:16
@malcmcmul:'d.items()'的每個元素都是一個元組,其中包含第一個鍵和第二個元素的值。列表和元組的索引是基於0的。因此,元組中的值的索引(您想要排序的)是'1'。 – 2012-01-31 14:37:35
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)]
'.items()'已經返回元組列表。 – 2012-01-31 14:07:54
首先,默認情況下,字典是無序。在構建數據集時,您可能需要使用列表並插入到適當的位置。否則,請使用sorted
函數。
sorted(dict.iteritems(), key=lambda (x, y): y)
的order dictionary可以用來存儲在有序的條目:
>>> from collections import OrderedDict
>>> d = OrderedDict(sorted(dict.items(), key=lambda item: item[1]))
你的意思是用'[ 'someText':0000001,...]'?那應該是什麼,一個清單? – 2012-01-31 14:03:27
請勿使用保留字'dict'作爲變量。 – 2012-01-31 14:04:20
但'[k1:v1,k2:v2,...]'語法既不是列表也不是字典。 – 2012-01-31 14:12:18