2

我正在尝试对这本字典进行排序:

dictionary = {24249:"t",390395:"b",90395:"q",5939:"z",1:"k",3909:"a"}

我见过人们使用 lambda 来做到这一点,但我试图通过仅使用 dict 方法来解决这个问题。

我能够订购这些值:

ordered = sorted(dictionary.values())

但我不知道如何访问有序值的键。

4

4 回答 4

3

在 Python 中,字典本质上是无序的。如果需要,您可以将字典转换为元组列表:

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

这会给你:

[(3909, 'a'), (390395, 'b'), (1, 'k'), (90395, 'q'), (24249, 't'), (5939, 'z')]
于 2013-07-26T17:25:59.307 回答
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')])
于 2013-07-26T17:35:26.867 回答
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]
于 2014-03-01T14:58:58.430 回答
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]))
于 2014-03-01T14:39:36.943 回答