字典创建后可以重新排列键吗?

时间:2013-04-17 18:17:41

标签: python dictionary

我很好奇是否可以在创建字典后重新排列密钥。

我想首先列举每个键背后的值总数,然后将顺序洗牌,以便从最大到最小打印出来。

说:

x= {'ONE': ['foo'], 'THREE': ['up', 'side', 'down'], 'TWO': ['hot', 'mess']} 

我能看到它,或者至少按照三,二,一的顺序打印出来吗?

我能否以某种方式将.getlen()结合起来实现这一目标?

2 个答案:

答案 0 :(得分:6)

字典键在Python中没有排序,因此无法对它们进行重新排序。

但是,如果您确实要按列表大小的顺序打印出来,可以将其显示为元组列表:

sorted(x.items(), key=lambda t: -len(t[1]))
# [('THREE', ['up', 'side', 'down']), ('TWO', ['hot', 'mess']), ('ONE', ['foo'])]

答案 1 :(得分:1)

没有有序词典的一种方法:

x= {'ONE': ['foo'], 'THREE': ['up', 'side', 'down'], 'TWO': ['hot', 'mess']}
xkeys = sorted(x, key=lambda y: len(x[y])
for key in xkeys:
    print(x[key])

它没有重新排序您的字典,但它是相同的结果。但正如其他人所说,在python中,dicts的定义是无序的。有序的dict允许您将元素移动到最后,也可以在创建时对其进行排序。文档:http://docs.python.org/dev/library/collections#collections.OrderedDict 所以你也可以使用那里找到的排序配方。

OrderedDict(sorted(d.items(), key=lambda t: len(t[1])))