按数字对列表中的列表进行排序

2024-05-12 19:07:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我在创建一个机器人的过程中,将比较许多项目的价格。在清单中我有价格和一些其他信息。但是,我想排序,例如,此列表

['Soul String', 'RARE',  [900000, '3b4c1f7f9ae447a983817c303b62375a', 'Soul String'], [4000000, 'feacbc053bb240be954a4b17c14077d2', 'Soul String'], [4000000, 'feacbc053bb240be954a4b17c14077d2', 'Soul String'], [700000, '01b6b2ec8a5c4a4e934149a33e99802e', 'Soul String'], [700000, 'be1aa3a0700b403898a2e6e05d77e63d', 'Soul String']]

根据价格,所以看起来像这个列表

['Soul String', 'RARE', [4000000, 'feacbc053bb240be954a4b17c14077d2', 'Soul String'], [4000000, 'feacbc053bb240be954a4b17c14077d2', 'Soul String'], [700000, '01b6b2ec8a5c4a4e934149a33e99802e', 'Soul String'], [700000, 'be1aa3a0700b403898a2e6e05d77e63d', 'Soul String']], [900000, '3b4c1f7f9ae447a983817c303b62375a', 'Soul String']

但我不知道该怎么办,也许你们中的一个可以帮我


Tags: 项目信息列表string排序过程机器人价格
3条回答

您可以通过lambda自定义排序:

l = ['Soul String', 'RARE',  [900000, '3b4c1f7f9ae447a983817c303b62375a', 'Soul String'], [4000000, 'feacbc053bb240be954a4b17c14077d2', 'Soul String'], [4000000, 'feacbc053bb240be954a4b17c14077d2', 'Soul String'], [700000, '01b6b2ec8a5c4a4e934149a33e99802e', 'Soul String'], [700000, 'be1aa3a0700b403898a2e6e05d77e63d', 'Soul String']]

sorted(l, key=lambda x: x[0] if type(x[0])==int else 999999999, reverse=True)

['Soul String',
 'RARE',
 [4000000, 'feacbc053bb240be954a4b17c14077d2', 'Soul String'],
 [4000000, 'feacbc053bb240be954a4b17c14077d2', 'Soul String'],
 [900000, '3b4c1f7f9ae447a983817c303b62375a', 'Soul String'],
 [700000, '01b6b2ec8a5c4a4e934149a33e99802e', 'Soul String'],
 [700000, 'be1aa3a0700b403898a2e6e05d77e63d', 'Soul String']]

请注意,您当前的格式并不理想,因为您正在混合数据。你可以考虑使用这样的字典:

d = {'Soul String': {'name': 'Soul String', 'rarity': 'RARE',  'stock': [[900000, '3b4c1f7f9ae447a983817c303b62375a', 'Soul String'], [4000000, 'feacbc053bb240be954a4b17c14077d2', 'Soul String'], [4000000, 'feacbc053bb240be954a4b17c14077d2', 'Soul String'], [700000, '01b6b2ec8a5c4a4e934149a33e99802e', 'Soul String'], [700000, 'be1aa3a0700b403898a2e6e05d77e63d', 'Soul String']]}}

d['Soul String']['stock'] = sorted(d['Soul String']['stock'], key = lambda x: x[0], reverse = True)

有一个list.sort方法允许自定义排序

例如,您可以检查当前元素是否也是列表,如果是,则按其编号对其进行排序。否则,就让它在原地吧

如果需要反向打印列表(从最大值到最小值),则需要为非列表元素提供可能的最大值(即math.inf

然后,如果将定义的自定义函数指定为key,则可以获取列表sortedreverse

>>> import math
>>> def sort_list(element):
...    if isinstance(element, (list, tuple)): 
...       return element[0]
...    else: 
...       return math.inf

>>> sorted(l, key=sort_list, reverse=True)
['Soul String',
 'RARE',
 [4000000, 'feacbc053bb240be954a4b17c14077d2', 'Soul String'],
 [4000000, 'feacbc053bb240be954a4b17c14077d2', 'Soul String'],
 [900000, '3b4c1f7f9ae447a983817c303b62375a', 'Soul String'],
 [700000, '01b6b2ec8a5c4a4e934149a33e99802e', 'Soul String'],
 [700000, 'be1aa3a0700b403898a2e6e05d77e63d', 'Soul String']]

相关问题 更多 >