2013-06-29 122 views
-4

我想排列一个字母表,其中列表排在第一位。Python按数字列表排序的值

例:

{"a":[2,1],"b":(4,7),"c":(5,3,9,7)} 

成为

{"c":(5,3,9,7),"b":(4,7),"a":[2,1]} 

的情况下有与相同长度的列表,与项目的最大总和列表是第一位的。

+4

词典没有顺序。你不能对它们进行排序。另外,你有什么尝试? – Blender

+0

如果您要使用数组,您可以首先按数组长度进行排序,然后选择具有相同列表大小的数组,然后按最大值进行排序。我对丁字的了解不多。 – Kyle

回答

3

定期字典是无序的,所以没有办法对它们进行排序。 Python有在collections模块中的有序字典类:

from collections import OrderedDict 

对它进行排序,你需要转换你的字典成键值对列表:

d = {"a":[2,1],"b":(4,7),"c":(5,3,9,7)} 
l = sorted(d.items(), key=lambda pair: (len(pair[1]), sum(pair[1])), reverse=True) 

现在,您可以构建您的有序字典出该列表中:

ordered_d = OrderedDict(l) 
0

Python中的dict是无序的。在那里有solutions,但我会详细说明如何订购.items()

data = {"a": [2, 1], "b": (4, 7),"c": (5, 3, 9, 7)} 
sorted_items = sorted(data.items(), key=lambda x: len(x[1]), sum(x[1]), reverse=True) 
# sorted_items = [("c", (5, 3, 9, 7)), ("b" (4, 7)), ("a", (2, 1))] 
0

您可以使用OrderedDict

>>> d = {"a":[2,1],"b":(4,7),"c":(5,3,9,7)} 
>>> from collections import OrderedDict 
>>> sd = OrderedDict(sorted(d.items(), key=lambda x: len(x[1]), reverse=True)) 
>>> sd 
OrderedDict([('c', (5, 3, 9, 7)), ('a', [2, 1]), ('b', (4, 7))]) 

但是这样做效率很低,因为每次您要添加项目时都必须重新编译字典。相反,你应该使用二叉树,它保持自然排序的项目。请参阅here预先制作的软件包,该软件包提供了一个类似于Python的字典的界面。

相关问题