我正在创建一个机器人的过程中,将比较许多项目的价格。在清单上,我有一些其他信息的价格。然而,我想对这份清单进行排序
['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']但我不知道我该怎么做,也许你们中的一个能帮我
发布于 2021-06-12 10:11:55
您可以通过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)发布于 2021-06-12 10:16:07
如果需要反向打印列表(从最大值到最小值),则需要为非列表元素提供可能的最大值(即math.inf)。
然后,如果您将定义的自定义函数赋值为sorted,则可以获得list reverse和reverse。
>>> 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']]发布于 2021-06-12 10:08:30
有一个允许自定义排序的list.sort方法。
例如,您可以检查当前元素是否也是一个列表,如果是,按其编号对其进行排序。否则,就让它在那里吧。
https://stackoverflow.com/questions/67947717
复制相似问题