4

所以我有一个小问题。不久前,我在这里获得了有关根据列表中事物的值对带有每个键的列表的键进行排序的字典的帮助。具有最少值的列表的键在左侧,而具有最多值的列表的键在右侧。那效果很好。现在我知道如何按字母顺序对字典键进行排序,但我无法将其与上述内容结合使用..

我正在尝试首先根据键列表包含的值的数量对下面的字典进行排序......然后如果键列表包含与前一个键列表相同数量的值,则按字母顺序排列。

所以在我有这个之前:

Dict = {"anna":[1,2,3],"billy":[1,2],"cilla":[1,2,3,4],"cecillia":[1,2,3,4],"dan":[1]}

如果一切顺利,我想拥有...

Dict = {"dan":[1],"billy":[1,2],"anna":[1,2,3],"cecillia":[1,2,3,4],"cilla":[1,2,3,4]}

正如您在上面看到的,排在前面cecilliacilla因为他们的列表中都有 4 个值......并且dan排在第一位是因为他的列表中的值最少。我希望这是有道理的。我现在得到以下结果的是:

ascending = sorted(Dict, key =lambda x: len(Dict[x]))

这给了我例如:

{"dan":[1],"billy":[1,2],"anna":[1,2,3],"cilla":[1,2,3,4],"cecillia":[1,2,3,4]}

所以它有效,但仅适用于列表中的值..现在当我去的时候

ascending.sort()

它按字母顺序对字典进行排序,但是从最小到最大的值顺序消失了。有谁知道如何将这两个东西结合起来?我将不胜感激。

4

1 回答 1

4

您不能保持字典排序,因此您必须将其转换为元组列表:

D = [ (x, Dict[x]) for x in Dict]
ascending = sorted(D, key = lambda x: x[1])
ascending.sort()

请参阅http://wiki.python.org/moin/HowTo/Sorting。顺便说一句,您所依赖的功能实际上是因为排序算法是稳定的(当我用 Python 编程时显然不是这种情况)。

于 2012-04-04T03:24:49.837 回答