0

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

我想首先枚举每个键后面的值的总数,然后打乱顺序,以便它们可以从最大到最小打印出来。

说:

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

我可以让它看起来像,或者至少按三、二、一的顺序打印出来吗?

我可以结合.get某种len()方式来实现这一目标吗?

4

2 回答 2

6

字典键在 Python 中没有排序,因此无法重新排序。

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

sorted(x.items(), key=lambda t: -len(t[1]))
# [('THREE', ['up', 'side', 'down']), ('TWO', ['hot', 'mess']), ('ONE', ['foo'])]
于 2013-04-17T18:18:46.517 回答
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])

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

OrderedDict(sorted(d.items(), key=lambda t: len(t[1])))
于 2013-04-17T18:27:23.880 回答