我有一份清单.每个条目是具有条目的另一个列表,一个是节点的名称,另一个条目是对应的节点权重.
l = [ [['A', 'C', 'B', 'D'], [2, 4, 3, 2]], [['E', 'F'], [3, 66]] ]
Run Code Online (Sandbox Code Playgroud)
我想根据每个节点的权重总和按递减顺序对列表进行排序.因此,对于此示例,['E', 'F']输入将首先出现,因为3 + 66 > 2 + 4 + 3 + 2
我写了一个像这样的lambda表达式:
l.sort(key=lambda x: x if not x[1] else sum(x[1]))
但它没有给我正确的答案.对于每一个x在l你有两个条目0和1,1作为权重的列表,所以我给的是对sum函数,以便进行排序,但它给我错误的答案.
首先,该sort方法从最小到最大排序.如果你想要相反,请使用reverse=True.
其次,max函数返回最大值,而不是所有值的总和.如果你想要总和,请使用sum.
第三,回到xif x[1]是空的似乎没有任何意义.如果没有权重,您希望将名称列表和空列表的列表视为权重之和?这不可能是正确的.*也许你想把它当作0,或大于所有数字的东西,或者......好吧,无论你想要什么,你都可以轻松地写出来.事实上,如果你想要的是0,那已经是默认值了sum.
因此,按照以下顺序排序3 + 66 > 2 + 4 + 3 + 2:
l.sort(key=lambda x: sum(x[1]), reverse=True)
Run Code Online (Sandbox Code Playgroud)
例如:
>>> l = [[[], []], [['E', 'F'], [3, 66]], [[], []], [['A', 'C', 'B', 'D'], [2, 4, 3, 2]]]
>>> l.sort(key=lambda x: sum(x[1]), reverse=True)
>>> l
[[['E', 'F'], [3, 66]], [['A', 'C', 'B', 'D'], [2, 4, 3, 2]], [[], []], [[], []]]
Run Code Online (Sandbox Code Playgroud)
*Python 2.x将勇敢地[[], []]与0您比较.该语言要么要么[[], []]大于所有数字,要么小于所有数字.如果您正在使用CPython 2.7,它会更大,因为它自己特别的规则,你真的不想学习,绝对不想依赖这里.Python 3.x将抵制做一些愚蠢的事情的诱惑,而只是提出一个TypeError.
| 归档时间: |
|
| 查看次数: |
58 次 |
| 最近记录: |