如何按字典中元组的第2个元素对Python列表排序?
解决Python列表排序时的KeyError: 1问题
嘿,这个错误的原因其实很好找——你在sort里写的lambda tup: tup[1]搞错了处理对象!
你要排序的data是一个字典列表,sort遍历的时候,每个传入lambda的参数是列表里的单个字典,而不是info对应的元组。你直接写tup[1],相当于在字典里找键为1的元素,这显然不存在,所以才会抛出KeyError: 1。
正确的写法
你需要先通过键'info'取出字典里的元组,再取元组的第2个元素(索引为1),修改后的代码如下:
data = [{'info': ('orange', 400000, 'apple'), 'photo': None}, {'info': ('grape', 485000, 'watermelon'), 'photo': None}] data.sort(key=lambda item: item['info'][1])
验证效果
执行这段代码后,data会按照元组的第二个元素从小到大排序,结果如下:
[ {'info': ('orange', 400000, 'apple'), 'photo': None}, {'info': ('grape', 485000, 'watermelon'), 'photo': None} ]
如果需要降序排序,只需要加上reverse=True参数即可:
data.sort(key=lambda item: item['info'][1], reverse=True)
简单来说,就是先定位到字典里的info元组,再取排序依据的元素,这样就不会再触发KeyError啦~
内容的提问来源于stack exchange,提问作者Valachio
相关产品推荐
相关产品推荐

