簡體   English   中英

如何在python中對如此復雜的列表進行排序?

[英]How to sort such a complex list in python?

x = [([('x', 2), ('m', 3)], 'a'), ([('y', 4), ('t',8), ('d', '100')], 'c'), ([('a', 1)], 'b')]

我想按內部元組整數排序,即 2, 4, 1. 所以排序列表應該是:

sorted_x = [(('a', 1), 'b'), (('x', 2), 'a'), (('y', 4), 'c')]

它應該看起來像這樣:

x_sorted = sorted(x, key=lambda tup: tup[1])

但是tup[1]是針對第一級元組的,我可以寫tup[tupe[1]]。

我想我需要先將列表展平,然后再對其進行排序。

編輯:

感謝非常復雜的列表排序的解決方案。 事實證明,我實際上應該對此進行排序(抱歉對問題陳述進行了修改):

x = ([('x', 2), ('m', 3), ('n', 1)], 'a')

結果:

sorted_x = ([('n', 1), ('x', 2), ('m', 3)], 'a')

我試過這個:

x_sorted = sorted(x, key=lambda tup: tup[0][1])

但是得到這個錯誤:

x_sorted = sorted(x, key=lambda tup: tup[0][1])
IndexError: string index out of range

嘗試這個:

>>> x = [([('x', 2), ('m', 3)], 'a'), ([('y', 4), ('t',8), ('d', '100')], 'c'), ([('a', 1)], 'b')]

>>> sorted([(a[0],b) for [*a],b in x], key = lambda x:x[0][1])
# or, sorted([(a,c) for [a,*b],c in x], key = lambda x:x[0][1])

[(('a', 1), 'b'), (('x', 2), 'a'), (('y', 4), 'c')]

這作為:

>>> [(a[0],b) for [*a],b in x]
[(('x', 2), 'a'), (('y', 4), 'c'), (('a', 1), 'b')]

[*a]接收每個元組中的列表,而b接收另一個元素,因此對於第一個元素:

[*a] == [('x', 2), ('m', 3)]   # b = 'a'
a == (('x', 2), ('m', 3))
a[0] == ('x', 2)

更明確的版本是:

>>> sorted([(inner_tup_1,other_elem) 
             for [inner_tup_1,*other_inner_tups], other_elem in x 
           ], key = lambda x:x[0][1])

編輯

>>> x = ([('x', 2), ('m', 3), ('n', 1)], 'a')
>>> a, b = ([('x', 2), ('m', 3), ('n', 1)], 'a')
>>> (sorted(a, key = lambda x:x[1]), b)
([('n', 1), ('x', 2), ('m', 3)], 'a')

第二行稱為unpacking

a, b = (1, 2) # implies a == 1, and b == 2
# similarly,
a, b = ([('x', 2), ('m', 3), ('n', 1)], 'a')
       -------------------------------  ---
                1st elem of tuple     2nd elem
# implies a == [('x', 2), ('m', 3), ('n', 1)] and b == 'a'
>>> sorted(a, key = lambda x:x[1])
[('n', 1), ('x', 2), ('m', 3)]
>>> sorted(a, key = lambda x:x[1]),  b
  ( [('n', 1), ('x', 2), ('m', 3)], 'a' )

有關拆包的更多信息,請參閱PEP 3132PEP 448

暫無
暫無

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

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