python - 排序是重复条目
问题描述
我想按嵌套 lsits 的第二个条目中的数值对嵌套列表进行排序。
name= ['Harry', 'Berry', 'Tina', 'Akriti', 'Harsh']
score = [37.21, 37.21, 37.2, 41.0, 39.0]
mylist = [[title, grade] for title in name for grade in score]
test = sorted(mylist, key=lambda x:x[1])
但是由于某种原因,这会重复条目。为什么不按嵌套列表中的第二个条目对列表进行排序?
test
[['Harry', 37.2], ['Berry', 37.2], ['Tina', 37.2], ['Akriti', 37.2], ['Harsh', 37.2], `['Harry', 37.21], ['Harry', 37.21], ['Berry', 37.21], ['Berry', 37.21], ['Tina', 37.21], ['Tina', 37.21], ['Akriti', 37.21], ['Akriti', 37.21], ['Harsh', 37.21], ['Harsh', 37.21], ['Harry', 39.0], ['Berry', 39.0], ['Tina', 39.0], ['Akriti', 39.0], ['Harsh', 39.0], ['Harry', 41.0], ['Berry', 41.0], ['Tina', 41.0], ['Akriti', 41.0], ['Harsh', 41.0]]`
解决方案
你想要zip
:
>>> name= ['Harry', 'Berry', 'Tina', 'Akriti', 'Harsh']
>>> score = [37.21, 37.21, 37.2, 41.0, 39.0]
>>> sorted(zip(score, name))
[(37.2, 'Tina'), (37.21, 'Berry'), (37.21, 'Harry'), (39.0, 'Harsh'), (41.0, 'Akriti')]
想象一下zip
将两个列表加在一起:
[(score[0], name[0]), (score[1], name[1]), ...]
而您所做的嵌套理解更像是将它们相乘:
[[name[0], score[0]], [name[1], score[0]], [name[2], score[0], ..., [name[0], score[1]], [name[1], score[1]], [name[2], score[1], ...]
推荐阅读
- string - Presto:使用一些默认值创建新列
- aws-lambda - 三个 lambda 函数定义的区别(handler.js)
- r - 用列的平均值替换 R 中小于 18 的值
- angular - OpenLayers 和 Geoserver,获取 Layer 的经纬度
- c++ - 设计具有低线程争用的多线程聊天服务器
- c# - 我应该如何使用“回发”?
- android - 如何离线使用最新的 Android SDK 文档
- swift - SwiftUI - 呈现工作表后导航栏按钮不可点击
- angular - Angular Push Notification - 避免存储重复的订阅对象
- python - Jupyter Notebook 中的内核错误,不知道该怎么办,我是新手