我有以下形式的字典:升序排序的值
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