如何在 Python 中按每个元组的某个索引的整数值对元组列表进行排序?
How to order a list of tuples by the integer value of a certain index of each, in Python?
给定一个元组列表,例如
[('a','b','4'),('c','d','9'),('e','f','2')]
每个元组的第三个元素总是整数的字符串值。
我想使用 csv.writerow()
将每个元组写为 csv 的一行。
在我这样做之前,我想重新排序元组(最好是通过覆盖现有列表或创建一个新列表),以便它们以 降序 的第三个元素的整数值写入每个例如
c,d,9
a,b,4
e,f,2
我正在尝试想象列表理解中的某种多重 if/else 组合,但肯定会有更简单的方法吗?
这适用于 Python 2 和 Python 3:
x = [('a','b','4'),('c','d','9'),('e','f','2')]
x.sort(key=lambda int(x:x[2]), reverse=True)
key
是应用于列表中每一项的函数,returns是用作排序依据的键。
sorted
函数(或 list
方法 sort
)采用可选参数 reverse
允许您按降序排序,key
允许您指定排序依据。
l = [('a','b','4'),('c','d','9'),('e','f','2')]
l.sort(key=lambda x: int(x[2]), reverse=True)
按照您想要的顺序为您提供列表。
在我的回答中,我使用 sys.stdout
作为示例,但您可以改用文件
>>> import sys, csv
>>> items = [('a','b','4'),('c','d','9'),('e','f','2')]
>>> w = csv.writer(sys.stdout)
>>> w.writerows(sorted(items, key=lambda x: int(x[2]), reverse=True))
c,d,9
a,b,4
e,f,2
另一个使用 itemgetter
比 lambda x: x[2]
小列表快一点,大列表快得多。
from operator import itemgetter
l = [('a','b','4'),('c','d','9'),('e','f','2')]
l.sort(key=itemgetter(2), revese=True)
Python sorting mini Howto 有很多有用的技巧值得一读。
略有不同,但效率较低的解决方案:
def sort_tuple_list(l):
sorted_ints = sorted([int(i[2]) for i in l], reverse=True)
sorted_tuple_list = []
for i in sorted_ints:
for tup in l:
if int(tup[2]) == i:
sorted_tuple_list.append(tup)
return sorted_tuple_list
Returns 根据原始问题的规格排序的列表。
然后您可以简单地将此返回列表的每一行写入您的 csv 文件。
给定一个元组列表,例如
[('a','b','4'),('c','d','9'),('e','f','2')]
每个元组的第三个元素总是整数的字符串值。
我想使用 csv.writerow()
将每个元组写为 csv 的一行。
在我这样做之前,我想重新排序元组(最好是通过覆盖现有列表或创建一个新列表),以便它们以 降序 的第三个元素的整数值写入每个例如
c,d,9
a,b,4
e,f,2
我正在尝试想象列表理解中的某种多重 if/else 组合,但肯定会有更简单的方法吗?
这适用于 Python 2 和 Python 3:
x = [('a','b','4'),('c','d','9'),('e','f','2')]
x.sort(key=lambda int(x:x[2]), reverse=True)
key
是应用于列表中每一项的函数,returns是用作排序依据的键。
sorted
函数(或 list
方法 sort
)采用可选参数 reverse
允许您按降序排序,key
允许您指定排序依据。
l = [('a','b','4'),('c','d','9'),('e','f','2')]
l.sort(key=lambda x: int(x[2]), reverse=True)
按照您想要的顺序为您提供列表。
在我的回答中,我使用 sys.stdout
作为示例,但您可以改用文件
>>> import sys, csv
>>> items = [('a','b','4'),('c','d','9'),('e','f','2')]
>>> w = csv.writer(sys.stdout)
>>> w.writerows(sorted(items, key=lambda x: int(x[2]), reverse=True))
c,d,9
a,b,4
e,f,2
另一个使用 itemgetter
比 lambda x: x[2]
小列表快一点,大列表快得多。
from operator import itemgetter
l = [('a','b','4'),('c','d','9'),('e','f','2')]
l.sort(key=itemgetter(2), revese=True)
Python sorting mini Howto 有很多有用的技巧值得一读。
略有不同,但效率较低的解决方案:
def sort_tuple_list(l):
sorted_ints = sorted([int(i[2]) for i in l], reverse=True)
sorted_tuple_list = []
for i in sorted_ints:
for tup in l:
if int(tup[2]) == i:
sorted_tuple_list.append(tup)
return sorted_tuple_list
Returns 根据原始问题的规格排序的列表。 然后您可以简单地将此返回列表的每一行写入您的 csv 文件。