2017-09-17 66 views
0

我想按unicode字符串的大小(即元組的第一個成員)對元組列表進行排序。python按值排序數據結構從低到高

「原始」 的元組看起來就像這樣:

一個

[ 

    [ 
     (u'90000', 100318), 
     (u'21000', 58094), 
     (u'50000', 14695), 
     (u'250000', 8190), 
     (u'100000', 5718), 
     (u'40000', 4276) 
    ] 
] 

處理,我想它看起來像在此之後:

[ 

    [ 
     (u'250000', 8190), 
     (u'100000', 5718), 
     (u'90000', 100318), 
     (u'50000', 14695), 
     (u'40000', 4276), 
     (u'21000', 58094) 
    ] 
] 

我嘗試了一些不同的方法,但是我一直無法讓它堅持下去。

如何排列元組列表A使其像B

+3

你剛剛複製粘貼電子郵件或聊天對話或什麼東西到問題框? – user2357112

+0

我不明白鏈接的問題與*或*更一般有關。在這裏,您正在排序元組列表,其中的數據正在從字典列表中讀取 –

回答

1

這是一個使用list.sort()的交互式演示。

>>> help(list.sort) 
Help on built-in function sort: 

sort(...) 
    L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*; 
    cmp(x, y) -> -1, 0, 1 

內置的幫助是有用的,但對於我們需要consult the python documentation

CMP參數的更完整的解釋指定的兩個參數(可迭代的元素),它應該返回一個自定義比較函數負數,零或正數取決於第一個參數是否小於,等於或大於第二個參數:cmp = lambda x,y:cmp(x.lower(),y.lower())。默認值是None。

key指定一個參數的函數,該參數用於從每個列表元素提取比較鍵:key = str.lower。默認值是None(直接比較元素)。

reverse是一個布爾值。如果設置爲True,那麼列表元素按照每個比較被顛倒的順序進行排序。

繼續上:

>>> l = [[(u'90000', 100318),(u'21000', 58094),(u'50000', 14695),(u'250000', 8190),(u'100000', 5718),(u'40000', 4276)]] 
>>> l[0].sort(key=lambda x:int(x[0]),reverse=True) 
>>> l 
[[(u'250000', 8190), (u'100000', 5718), (u'90000', 100318), (u'50000', 14695), (u'40000', 4276), (u'21000', 58094)]] 
+1

您可以通過實際解釋代碼的工作方式以及「鍵」的排序來改進此答案 –

+0

添加文檔鏈接和摘錄 – jq170727

+0

更好! –

0

由於內部列表,則需要挖入下一層=> A [0]

然後使用與鍵&反向排序函數幫助你實現目標

list.sort(A[0], key= lambda x: int(x[0]), reverse=True)