按值pythonsorting字​​典

假设我有一个字典。

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

我想按“b”和“a”来sorting数据,以便得到结果

 'a','b' 

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

获取值使用

 sorted(data.values()) 

要获得匹配的键,请使用keyfunction

 sorted(data, key=data.get) 

获取按值sorting的元组列表

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

相关内容:请参阅此处的讨论: 字典是以Python 3.6+订购的

如果你真的想sorting字典,而不是仅仅获得一个sorting列表使用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'] 

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

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

sorting值:

 sorted(data.values()) 

回报

 ['a','b'] 

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

最后是这样的:

 d = sorted(data, key = d.get) for id in d: text = data[id] 

我也认为重要的是要注意,Python dict对象types是一个哈希表( 更多在这里 ),因此不能被sorting没有将其键/值转换为列表。 这允许的是dict检索在恒定的时间O(1) ,不pipe字典中的元素的大小/数量。

话虽如此,一旦你sorting它的键 – sorted(data.keys()) ,或值 – sorted(data.values()) ,然后可以使用该列表访问devise模式中的键/值,如:

 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 

希望这可以帮助。

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

PEP 256build议用这个值来对字典进行sorting。

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

如果你想降序,做这个

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

没有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 ('=======================') 

您可以从值中创buildsorting列表并重build字典:

 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'}