繁体   English   中英

如何使用字母和数字组合对嵌套的元组列表进行排序

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM