[英]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
副本。
您应该考虑的其他几件事;
info
作为密钥怎么办? 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.