首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按数字对列表中的列表进行排序

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

Stack Overflow用户
提问于 2021-06-12 10:05:18
回答 3查看 70关注 0票数 1

我正在创建一个机器人的过程中,将比较许多项目的价格。在清单上,我有一些其他信息的价格。然而,我想对这份清单进行排序

代码语言:javascript
复制
['Soul String', 'RARE',  [900000, '3b4c1f7f9ae447a983817c303b62375a', 'Soul String'], [4000000, 'feacbc053bb240be954a4b17c14077d2', 'Soul String'], [4000000, 'feacbc053bb240be954a4b17c14077d2', 'Soul String'], [700000, '01b6b2ec8a5c4a4e934149a33e99802e', 'Soul String'], [700000, 'be1aa3a0700b403898a2e6e05d77e63d', 'Soul String']]

按价格计算,看上去就像这张单子

代码语言:javascript
复制
['Soul String', 'RARE', [4000000, 'feacbc053bb240be954a4b17c14077d2', 'Soul String'], [4000000, 'feacbc053bb240be954a4b17c14077d2', 'Soul String'], [700000, '01b6b2ec8a5c4a4e934149a33e99802e', 'Soul String'], [700000, 'be1aa3a0700b403898a2e6e05d77e63d', 'Soul String']], [900000, '3b4c1f7f9ae447a983817c303b62375a', 'Soul String']

但我不知道我该怎么做,也许你们中的一个能帮我

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-06-12 10:11:55

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

代码语言:javascript
复制
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']]

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

代码语言:javascript
复制
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)
票数 2
EN

Stack Overflow用户

发布于 2021-06-12 10:16:07

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

然后,如果您将定义的自定义函数赋值为sorted,则可以获得list reversereverse

代码语言:javascript
复制
>>> 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']]
票数 3
EN

Stack Overflow用户

发布于 2021-06-12 10:08:30

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67947717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档