使用列表值对字典进行排序

时间:2015-06-17 16:24:31

标签: python sorting dictionary

我从redis键值存储中提取一些数据。 数据采用列表格式。然而,我拉它们并将它们放入字典中

{ name1: [ int1, int2] }
{ name2: [ int11,int22]}
..etc...

我想创建一个排序字典,其中提取的条目按列表中的int2值排序。我该怎么做这个sort和itemgetter?

因此,我喜欢排序字典,以便names按照列表值int2的值按降序排序

我试过sorted(data, key=itemgetter(2)),但这显然不起作用:(

3 个答案:

答案 0 :(得分:1)

要获取所有名称的排序列表,您必须获取密钥的值:

sorted_names = sorted(data, key=lambda k: data[k][1])

答案 1 :(得分:1)

你可以尝试 -

sorted(d.items() , key=lambda x: d[x[0]][1])

这将返回按字典值列表中的第二个元素排序的元组。

请注意,字典在其元素中没有order的概念,即您本身不能sort字典。

答案 2 :(得分:0)

根据Python Docs

  

最好将字典视为一组无序的键:值   对,要求密钥是唯一的(在一个内   字典)。

所以,你不能得到一个有序的字典,如果你想保持相同的数据类型,即:字典和订购项目,使用OrderedDict

  

有序词典就像常规词典一样,但它们   记住插入项目的顺序。迭代时   有序字典,项目按顺序返回其键   首先加入。

因此,如果您想获得按int2排序的有序字典(来自Python文档的示例)

from collections import OrderedDict

d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}

d = OrderedDict(sorted(d.items(), key=lambda t: t[1])) #Order by Value

print d

输出:

OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])