我正在尝试对这本字典进行排序:
dictionary = {24249:"t",390395:"b",90395:"q",5939:"z",1:"k",3909:"a"}
我见过人们使用lambda来做这件事,但我试图通过仅使用dict方法来解决这个问题。
我能够订购价值:
ordered = sorted(dictionary.values())
但我不知道如何访问有序值的键。
答案 0 :(得分:3)
在Python中,词典本质上是无序的。如果需要,可以将字典转换为元组列表:
result = sorted(dictionary.items(),key=lambda x: x[1])
会给你:
[(3909, 'a'), (390395, 'b'), (1, 'k'), (90395, 'q'), (24249, 't'), (5939, 'z')]
答案 1 :(得分:1)
您可以使用OrderedDict
。当然,这将要求您从collections
模块导入一个类,但请记住 - “普通”字典不保持其条目的顺序:
有序词典就像常规词典一样,但它们记住了项目的插入顺序。迭代有序字典时,项目按照其键首次添加的顺序返回。
例如,这是一个使用排序键进行插入顺序的字典,这意味着:如果迭代它,条目将按键排序:
from collections import OrderedDict
dictionary = { 24249:'t', 390395:'b', 90395:'q', 5939:'z', 1:'k', 3909:'a' }
OrderedDict(sorted(dictionary.items(), key=lambda x: x[0]))
=> OrderedDict([(1, 'k'), (3909, 'a'), (5939, 'z'),
(24249, 't'), (90395, 'q'), (390395, 'b')])
答案 2 :(得分:0)
以下是不导入模块的解决方案,而不使用lambda 按值对字典进行排序:
dictionary = {24249: "t", 390395: "b", 90395: "q", 5939: "z", 1: "k", 3909: "a"}
keys_sorted_by_value = sorted(dictionary, key=dictionary.get)
按排序顺序打印:
for key in keys_sorted_by_value:
print("key: {key}, value: {value}".format(key=key, value=dictionary[key]))
答案 3 :(得分:0)
我会这样做:
dictionary = {24249:"t",390395:"b",90395:"q",5939:"z",1:"k",3909:"a"}
val = dictionary.values()
val
['a', 'b', 'k', 'q', 't', 'z']
[{v:k for k,v in dictionary.items()}[i] for i in val]
[3909, 390395, 1, 90395, 24249, 5939]