如何在不导入模块的情况下按值类型排序字典

时间:2013-07-26 17:24:11

标签: python string methods dictionary

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

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

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

我能够订购价值:

ordered = sorted(dictionary.values())

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

4 个答案:

答案 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]