93

假设我有一个字典。

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

我想按'b'和'a'对数据进行排序,所以我得到了结果

'a','b'

我怎么做?
有任何想法吗?

4

9 回答 9

182

To get the values use

sorted(data.values())

To get the matching keys, use a key function

sorted(data, key=data.get)

To get a list of tuples ordered by value

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

Related: see the discussion here: Dictionaries are ordered in Python 3.6+

于 2013-05-27T11:23:16.623 回答
47

如果您实际上想要对字典进行排序而不是仅仅获得排序列表,请使用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']
于 2013-05-27T11:53:33.567 回答
18

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

sorted(data.items(), key=lambda x:x[1])
于 2013-05-27T12:35:48.133 回答
9

Sort the values:

sorted(data.values())

returns

['a','b']
于 2013-05-27T11:23:17.957 回答
9

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

最后做了这样的事情:

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

for key in d:
    text = data[key]
于 2013-05-27T13:01:01.670 回答
6

我还认为重要的是要注意 Pythondict对象类型是一个哈希表(这里有更多内容),因此如果不将其键/值转换为列表就无法进行排序。这允许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

希望这可以帮助。

于 2013-05-27T11:37:22.910 回答
5

您可以从 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={'one': '1', 'two': '2', '1four': '4', 'five': '5'}

于 2017-09-29T20:42:47.417 回答
4

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

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

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

如果要降序,请执行此操作

sorted(d.iteritems(), key=itemgetter(1), reverse=True)
于 2016-11-10T19:08:12.000 回答
2

没有 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 ('=======================')
于 2017-05-24T03:35:11.130 回答