我正在尝试对这本字典进行排序:
dictionary = {24249:"t",390395:"b",90395:"q",5939:"z",1:"k",3909:"a"}
我见过人们使用 lambda 来做到这一点,但我试图通过仅使用 dict 方法来解决这个问题。
我能够订购这些值:
ordered = sorted(dictionary.values())
但我不知道如何访问有序值的键。
我正在尝试对这本字典进行排序:
dictionary = {24249:"t",390395:"b",90395:"q",5939:"z",1:"k",3909:"a"}
我见过人们使用 lambda 来做到这一点,但我试图通过仅使用 dict 方法来解决这个问题。
我能够订购这些值:
ordered = sorted(dictionary.values())
但我不知道如何访问有序值的键。
在 Python 中,字典本质上是无序的。如果需要,您可以将字典转换为元组列表:
result = sorted(dictionary.items(),key=lambda x: x[1])
这会给你:
[(3909, 'a'), (390395, 'b'), (1, 'k'), (90395, 'q'), (24249, 't'), (5939, 'z')]
您可以使用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')])
我会这样做:
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]
这是一个不导入模块并且不使用 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]))