Python按两个值对列表进行排序
我试着把这个列表按名字倒序排列。然后,在第一组结果(其中flag=“ZAR”)之后,我想按时间对其余元素进行排序,而不是按相反顺序:Python按两个值对列表进行排序,python,sorting,Python,Sorting,我试着把这个列表按名字倒序排列。然后,在第一组结果(其中flag=“ZAR”)之后,我想按时间对其余元素进行排序,而不是按相反顺序: import operator list = [ {"flag":"ZAR", "time":"17:45"}, {"flag":"AUS", "time":"17:30"}, {"flag":"AUS", "time":"17:15"}, {"flag":"USA", "time":"17:00"}, {"flag":"G
import operator
list = [
{"flag":"ZAR", "time":"17:45"},
{"flag":"AUS", "time":"17:30"},
{"flag":"AUS", "time":"17:15"},
{"flag":"USA", "time":"17:00"},
{"flag":"GBP", "time":"16:55"},
{"flag":"ZAR", "time":"16:45"},
{"flag":"USA", "time":"16:35"},
{"flag":"GBP", "time":"16:25"},
{"flag":"ZAR", "time":"16:15"},
]
list.sort(key=operator.itemgetter("time"))
list.sort(key=operator.itemgetter("flag"),reverse=True)
print list
[{'flag': 'ZAR', 'time': '16:15'}, {'flag': 'ZAR', 'time': '16:45'}, {'flag': 'ZAR', 'time': '17:45'}, {'flag': 'USA', 'time': '16:35'}, {'flag': 'USA', 'time': '17:00'}, {'flag': 'GBP', 'time': '16:25'}, {'flag': 'GBP', 'time': '16:55'}, {'flag': 'AUS', 'time': '17:15'}, {'flag': 'AUS', 'time': '17:30'}]
正如您所看到的,标志排序是正确的,但其他元素仅在已排序的国家内按时间排序
我想要的是始终先有ZAR,之后不管旗帜的名称是什么,只有时间。所以它应该给出这个结果:
[{'flag': 'ZAR', 'time': '16:15'}, {'flag': 'ZAR', 'time': '16:45'}, {'flag': 'ZAR', 'time': '17:45'}, {'flag': 'GBP', 'time': '16:25'}, {'flag': 'USA', 'time': '16:35'}, {'flag': 'GBP', 'time': '16:55'}, {'flag': 'USA', 'time': '17:00'}, {'flag': 'AUS', 'time': '17:15'}, {'flag': 'AUS', 'time': '17:30'}]
如何做到这一点?将您的代码修改为:
import operator
data = [
{"flag":"ZAR", "time":"17:45"},
{"flag":"AUS", "time":"17:15"},
{"flag":"USA", "time":"17:00"},
{"flag":"GBP", "time":"16:55"},
{"flag":"ZAR", "time":"16:45"},
{"flag":"USA", "time":"16:35"},
{"flag":"GBP", "time":"16:25"},
{"flag":"ZAR", "time":"16:15"},
]
data.sort(key=operator.itemgetter("time"))
data.sort(key=lambda L: L['flag'] == 'ZAR', reverse=True)
# [{'flag': 'ZAR', 'time': '16:15'}, {'flag': 'ZAR', 'time': '16:45'}, {'flag': 'ZAR', 'time': '17:45'}, {'flag': 'GBP', 'time': '16:25'}, {'flag': 'USA', 'time': '16:35'}, {'flag': 'GBP', 'time': '16:55'}, {'flag': 'USA', 'time': '17:00'}, {'flag': 'AUS', 'time': '17:15'}, {'flag': 'AUS', 'time': '17:30'}]
列表最糟糕的名称是
list
。你需要澄清你的要求——你不是在“按两个值对列表进行排序”这个词的正常意义上。你能确认一下吗:你首先想要所有的ZAR值(按时间排序还是不排序?),然后你想要剩余的元素按时间排序,不管标志值是什么-是这样吗?啊,我们开始了!更有意义!谢谢