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