![](/img/trans.png)
[英]Python how to order a list of dictionaries based on a value in list of tuples
[英]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
是應用於列表中每個項目的函數,並返回用作排序基礎的鍵。
另一個使用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排序迷你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.