按值python排序dict

时间:2013-05-27 11:22:14

标签: python dictionary python-2.6

假设我有一个词典。

data = {1:'b', 2:'a'}

我希望按'b'和'a'对数据进行排序,以便得到结果

'a','b'

我该怎么做?
有什么想法吗?

9 个答案:

答案 0 :(得分:153)

要使用值

sorted(data.values())

要获取匹配的密钥,请使用key功能

sorted(data, key=data.get)

获取按值排序的元组列表

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

相关:请参阅此处的讨论:Dictionaries are ordered in Python 3.6+

答案 1 :(得分:38)

如果您确实想要对字典进行排序而不是仅仅获取已排序的列表,请使用collections.OrderedDict

>>> from collections import OrderedDict
>>> from operator import itemgetter
>>> data = {1: 'b', 2: 'a'}
>>> d = OrderedDict(sorted(data.items(), key=itemgetter(1)))
>>> d
OrderedDict([(2, 'a'), (1, 'b')])
>>> d.values()
['a', 'b']

答案 2 :(得分:17)

从您的评论到gnibbler答案,我想说你想要一个按值排序的键值对列表:

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

答案 3 :(得分:9)

对值进行排序:

sorted(data.values())

返回

['a','b']

答案 4 :(得分:8)

感谢所有答案。 你们都是我的英雄; - )

到底是这样的:

d = sorted(data, key = d.get)

for id in d:
    text = data[id]

答案 5 :(得分:5)

我还认为重要的是要注意Python dict对象类型是一个哈希表(more on this here),因此无法在不将其键/值转换为列表的情况下进行排序。这允许dict项目在常量时间O(1)中检索,无论字典中元素的大小/数量。

话虽如此,一旦您对其键 - sorted(data.keys())或值 - sorted(data.values())进行排序,您就可以使用该列表来访问设计模式中的键/值,如下所示:

for sortedKey in sorted(dictionary):
    print dictionary[sortedKeY] # gives the values sorted by key

for sortedValue in sorted(dictionary.values()):
    print sortedValue # gives the values sorted by value

希望这有帮助。

答案 6 :(得分:3)

在回复John的评论中,您建议您想要字典的键和值,而不仅仅是值。

PEP 256建议按值对字典进行排序。

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

如果您想降序,请执行此操作

sorted(d.iteritems(), key=itemgetter(1), reverse=True)

答案 7 :(得分:1)

没有lambda方法

# sort dictionary by value
d = {'a1': 'fsdfds', 'g5': 'aa3432ff', 'ca':'zz23432'}
def getkeybyvalue(d,i):
    for k, v in d.items():
        if v == i:
            return (k)

sortvaluelist = sorted(d.values())
sortresult ={}
for i1 in sortvaluelist:   
    key = getkeybyvalue(d,i1)
    sortresult[key] = i1
print ('=====sort by value=====')
print (sortresult)
print ('=======================')

答案 8 :(得分:1)

您可以从Values创建排序列表并重建字典:

myDictionary={"two":"2", "one":"1", "five":"5", "1four":"4"}

newDictionary={}

sortedList=sorted(myDictionary.values())

for sortedKey in sortedList:
    for key, value in myDictionary.items():
        if value==sortedKey:
            newDictionary[key]=value

输出:newDictionary = {'一个':' 1','两个':' 2',' 1four&# 39;:' 4','五':' 5'}