2017-04-26 98 views
0

特定部分我在格式的列表的列表:排序根據在列表的Python

Apple, Orange[123 431]43351 
Banana, Cherry[141 421]23423 
Coconut, Mango[23 12312]232342 
.... 
.... 

我想根據托架「]」後的數字對列表進行排序。 輸出應該是:

Banana, Cherry[141 421]23423 
Apple, Orange[123 431]43351 
Coconut, Mango[23 12312]232342 

我想用這對列表進行排序:

LIST.sort(key = lambda x: x.split()[1]) 
for item in LIST: 
    print(item) 

我可以找到這個最後的數字: 但我不能對它進行排序

for item in LIST: 
    bracket_index = item.find("]") 
    end_of_line = item[bracket_index + 1:] 
    if bracket_index != -1: 
     print(end_of_line) 
+1

'LIST.sort(key = lambda x:int(x.split(']')[1]))'? – Psidom

+0

只需注意,ALL_CAPS通常用於常量,即不變的變量。如果您正在整理列表,它可能不屬於該類別。 – zondo

回答

1

什麼是你的列表的格式?它是元組列表還是字符串列表?這工作:

a = ['Apple, Orange[123 431]43351', 
'Banana, Cherry[141 421]23423', 
'Coconut, Mango[23 12312]232342'] 

a.sort(key = lambda el: el.split(']')[1]) 
print(a) 

Output: 
['Coconut, Mango[23 12312]232342', 
'Banana, Cherry[141 421]23423', 
'Apple, Orange[123 431]43351'] 

如果是對串的列表,而不是,那麼你應該使用key = lambda el: el[1].split(']')[1]像這樣:

a = [('Apple', 'Orange[123 431]43351'), 
('Banana', 'Cherry[141 421]23423'), 
('Coconut',' Mango[23 12312]232342')] 

a.sort(key = lambda el: el[1].split(']')[1]) 
print(a) 

Output: 
[('Coconut', ' Mango[23 12312]232342'), 
('Banana', 'Cherry[141 421]23423'), 
('Apple', 'Orange[123 431]43351')] 
+0

我的列表格式爲: 名單= [ '蘋果,橙[123 431] 43351', '香蕉,櫻桃[141 421] 23423', '椰子,芒果[23 12312] 232342'] 我想要的輸出是: 香蕉,櫻桃[141 421] 23423 蘋果,橘子[123 431] 43351 椰子,芒果[23 12312] 232342 –

+0

@VaibhavBorkar那麼這正是我在第一次回答中提到的格式。 – asdf

0

你可以用@ Psidom的建議去:

LIST.sort(key=lambda x: int(x.split(']')[1])) 

通知使用int()確保排序由字符串比較(其被懶惰地完成做數值而非;即,0123由於'4' > '2',被認爲是「大於」'20000000')。


完整的示例:

LIST = [ 
    'Apple, Orange[123 431]43351', 
    'Banana, Cherry[141 421]23423', 
    'Coconut, Mango[23 12312]232342' 
] 

LIST.sort(key=lambda x: int(x.split(']')[1])) 
print(LIST) 

一個更好的方法是先分析你的字符串。例如:

from collections import namedtuple 
import re 

FruitTuple = namedtuple('FruitTuple', ['fruit', 'color', 'num1', 'num2', 'num3']) 

unparsed_list = [ 
    'Apple, Orange[123 431]43351', 
    'Banana, Cherry[141 421]23423', 
    'Coconut, Mango[23 12312]232342' 
] 

split_list = [re.search('(\\w+), (\\w+)\\[(\\d+) (\\d+)\\](\\d+)', x).groups() for x in unparsed_list] 
fruit_list = [FruitTuple(*x) for x in split_list] 
fruit_list.sort(key=lambda x: int(x.num2)) 

print(fruit_list) 

產地:

[FruitTuple(水果= '香蕉',顏色= '櫻桃',NUM1 = '141',NUM2 = '421',NUM3 = '23423' ),FruitTuple(水果= '蘋果',顏色= '橙色',NUM1 = '123',NUM2 = '431',NUM3 = '43351'),FruitTuple(水果= '椰子',顏色= '芒果',NUM1 = '23',num2 ='12312',num3 ='232342')]

+0

字符串比較僅考慮前幾個字符並不完全正確。這取決於字符串的相似程度。當比較'this'和'thin'時,所有的角色都會被比較。 – zondo

+0

我得到語句的語法錯誤(鍵= lambda x:) –

+0

對不起,我忘了'']'' –