2013-06-29 121 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的字典的界面。

相關問題