繁体   English   中英

Python-按字典中元组中的某个元素对列表进行排序

[英]Python - Sort a list by a certain element in a tuple in a dictionary

data = [{'info': ('orange', 400000, 'apple'), 'photo': None}, {'info': ('grape', 485000, 'watermelon'), 'photo': None}]

我想按字典中元组中的第二个元素(400000,485000)对data进行排序。 我该怎么做呢?

我遵循了另一个答案,最接近的尝试是data.sort(key=lambda tup: tup[1]) ,但这会产生此错误:

KeyError:1

list.sort方法与首先info索引, 然后对元组中的数据索引的key一起使用:

data.sort(key=lambda x: x['info'][1])

或者, 不是就地sorted函数:

data = sorted(data, key=lambda x: x['info'][1])

在这两者之间, list.sort更快,因为它可以对数据进行就地sorted ,而sorted必须创建并返回data中的data副本。

您应该考虑的其他几件事;

  1. 如果您的词典没有info作为密钥怎么办?
  2. 如果info元组中的第二个元素甚至不是数字怎么办?

您是否希望sort在遇到无效数据时出错? 还是您宁愿介绍一些根据具体情况进行处理的方法? key将需要相应地更改。

您可以通过key进行排序:

data = [{'info': ('orange', 400000, 'apple'), 'photo': None}, {'info': ('grape', 485000, 'watermelon'), 'photo': None}]
new_data = sorted(data, key=lambda x:x.get('info', [0, 0])[1])

对于要排序的列表中的每个dict项,您都希望采用以'info'键为列表的项的值,然后对第二个项(地址为[1],从零开始计数)进行排序。

因此: data.sort(key=lambda item: item['info'][1])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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