我很好奇是否可以在创建字典后重新排列密钥。
我想首先列举每个键背后的值总数,然后将顺序洗牌,以便从最大到最小打印出来。
说:
x= {'ONE': ['foo'], 'THREE': ['up', 'side', 'down'], 'TWO': ['hot', 'mess']}
我能看到它,或者至少按照三,二,一的顺序打印出来吗?
我能否以某种方式将.get
与len()
结合起来实现这一目标?
答案 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])))