2012-01-31 76 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]))