我有一个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。
有一种简单的方法吗?
答案 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。)