[英]How do I sort nested list of tuples with letter and number combinations
我需要首先对整数(第二个元素)然后在字符串/数字组合(第一个元素)上对嵌套的元组列表进行排序。 我试图在对第二个元素进行排序后使第一个元素按升序排列。 一个很好的例子是第二个元素为 10 的元组。d522 应该是十组中的第一个元组。
预期输出示例
#[[('d51', 23), ('d874', 20), ('d486', 15), ('d329', 12), ('d1328', 11), ('d1268', 11), ('d114', 11), ('d522', 10),('d717', 10),('d792', 10)]
tupple=[[('d51', 23), ('d874', 20), ('d486', 15), ('d329', 12), ('d1328', 11), ('d1268', 11), ('d114', 11), ('d792', 10), ('d717', 10),('d522', 10)],
[('d51', 23), ('d874', 20), ('d486', 15), ('d329', 12), ('d1328', 11), ('d1268', 11)]]
for item in tupple:
sorted(item, key=lambda element: (element[1], (int("".join([i for i in element[0] if i.isdigit()])))),reverse=True)
# new = [[item[0] for item in inner] for inner in tupple]
tupple
###output [[('d51', 23), ('d874', 20), ('d486', 15), ('d329', 12), ('d1328', 11), ('d1268', 11), ('d114', 11), ('d792', 10), ('d717', 10), ('d522', 10)], [('d51', 23), ('d874', 20), ('d486', 15), ('d329', 12), ('d1328', 11), ('d1268', 11)]]
您可以强制密钥的第二部分反过来。 在这种情况下,这相当容易:只需在创建的数字前面放一个减号,(辅助)比较就会被反转。
(您还忘记将sorted()
的结果分配回tupple[i]
,因为sorted()
返回一个副本;与item.sort()
相比,它不会就地更改item
。但我发现tupple[i] = sorted(...)
这里更清楚。
tupple=[[('d51', 23), ('d874', 20), ('d486', 15), ('d329', 12), ('d1328', 11), ('d1268', 11), ('d114', 11), ('d792', 10), ('d717', 10),('d522', 10)],
[('d51', 23), ('d874', 20), ('d486', 15), ('d329', 12), ('d1328', 11), ('d1268', 11)]]
for i, item in enumerate(tupple):
tupple[i] = sorted(item, key=lambda element: (element[1], -int("".join(i for i in element[0] if i.isdigit()))), reverse=True)
# Or alternatively
# item.sort(key=lambda element: (element[1], -int("".join(i for i in element[0] if i.isdigit()))), reverse=True)
tupple
这导致
[[('d51', 23), ('d874', 20), ('d486', 15), ('d329', 12), ('d114', 11),
('d1268', 11), ('d1328', 11), ('d522', 10), ('d717', 10), ('d792', 10)],
[('d51', 23), ('d874', 20), ('d486', 15), ('d329', 12), ('d1268', 11), ('d1328', 11)]]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.