Python中如何按双优先级条件对元组列表进行排序
解决指定规则的元组列表排序问题
嘿,这个排序需求很明确,我给你一个Python的完美解决方案,完全符合你要求的数字降序优先,数字相同时字母升序的规则:
original_list = [('B', 2), ('A', 6), ('D', 4), ('E', 6), ('C', 2)] sorted_list = sorted(original_list, key=lambda x: (-x[1], x[0])) print(sorted_list) # 输出结果正好是你要的:[('A', 6), ('E', 6), ('D', 4), ('B', 2), ('C', 2)]
为什么这个方案可行?
核心是利用Python内置的sorted()函数的key参数,自定义了排序的优先级逻辑:
-x[1]:把元组里的数字取负值,这样原本大的数字会变成更小的负数,在默认的升序排序逻辑中,就等价于按数字从高到低排序;x[0]:当两个元组的数字相同时,就会比较这个部分——按元组的第一个元素(字母)进行默认的升序排序,正好满足字母从小到大的要求;- 因为
sorted()会按照key返回的元组顺序依次比较优先级,所以数字降序的优先级自然高于字母升序,完美匹配你的需求。
如果你想直接在原列表上修改(而不是生成新列表),可以用列表的sort()方法,用法几乎一样:
original_list = [('B', 2), ('A', 6), ('D', 4), ('E', 6), ('C', 2)] original_list.sort(key=lambda x: (-x[1], x[0])) print(original_list) # 同样得到目标结果
内容的提问来源于stack exchange,提问作者Tan Sriprai
相关产品推荐
相关产品推荐

