2017-09-17 33 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)