簡體   English   中英

如何在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組合,但是肯定會有一種更簡單的方法嗎?

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

這適用於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是應用於列表中每個項目的函數,並返回用作排序基礎的鍵。

另一個使用itemgetterlambda 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排序迷你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

返回根據原始問題的規范排序的列表。 然后,您可以簡單地將此返回列表的每一行寫入csv文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM