通过更改密钥对Python字典进行排序,现在当我尝试迭代它时,它会遍历更改的密钥

时间:2017-06-04 05:21:39

标签: python arrays sorting dictionary

我有一个Python中的数组字典,

dictionary={a:[1,2,3,4],b:[2,3,4,8],c:[3,5,6,5]}

依旧等等

我已经对字典进行了排序,现在它按每个数组的第四项排序,所以顺序为b,c,a

dictionary=sorted(dictionary.values(),key=itemgetter(3),reverse=True)

问题是,当我尝试迭代键时,它会将键作为数组本身射出。

for key in dictionary:
    print(key)

打印出[2,3,4,8],但是,我希望它按顺序迭代b,c,a。

有一种简单的方法吗?

2 个答案:

答案 0 :(得分:4)

你忘记了关于python词典的一个小但非常重要的观点。它们无法排序!

您在代码中实际执行的操作是对字典值进行排序。要使字典看起来是排序的,您需要创建一个由字典键组成的排序列表。

keys = sorted(dictionary, key=lambda x: (dictionary[x][3],x))
for k in keys:
   print (k, dictionary[k])

答案 1 :(得分:0)

Sorted是一个内置函数,它接受像列表(数组)或字典或任何其他类似类型的迭代,并返回列表(数组)作为输出。 (请参阅此处:Builtin Function - sorted()

您无法对字典本身进行排序并将其存储为字典本身是无序的(它不记得其键的顺序)。

为了存储字典及其顺序,请在python中使用ordereddict数据类型。 (请参阅此处Ordereddict

要对有序字典进行排序,请参阅stackoverflow question

(有关排序字典的详细信息,请参阅this question。)