2016-12-28 63 views
0

我在這裏查看了一下,發現了大量列表比較方法。但沒有一個覆蓋我的具體問題......所以這裏有雲:如何比較列表中的元素,但排除元素的尾部(如果存在重複項):創建包含元素尾部的新列表

我有一個列表:

currentList = ["Blur1['size']: $gui index:1", "Blur1['size']: $gui index:3", 
       "Blur2['mix']: $gui?4:8"] 

我想刪除重複的,但我不希望包括' index:1'' index:3''index'與此背後的任何數字。

然後我想創建一個新列表,並且如果在currentList中找到任何重複項,我想創建一個只包含重複項中的一個元素的新列表,但我還希望新元素包含數字在重複中找到。

本質上是創建新的列表時,我想的區別是這樣的:

currentList = ["Blur1['size']: $gui index:1", "Blur1['size']: $gui index:3", 
       "Blur2['mix']: $gui?4:8"] 

currentList比較元素後創建新的列表。

newList = ["Blur1['size']: $gui 13", "Blur2['mix']: $gui?4:8"] 

新的列表僅具有"Blur1['size']: $gui" 1個元素,但它具有組合編號1和3添加到字符串的尾部,從重複進來currentList

我知道如何刪除重複刪除索引,我可以做一個如果測試如果'index'如果存在字符串..我面臨的問題是,我想保留在'index'後面的數字並重新創建1個單元素,後面跟着'index'字符串。

我希望這是有道理的。我非常感謝這個python問題的任何幫助。

回答

0

將使用OrderedDict(保持的currentList同一順序)split()和一些list comprehensions像這樣的方法:

from collections import OrderedDict 

current_list = ["Blur1['size']: $gui index:1", "Blur1['size']: $gui index:3", 
       "Blur2['mix']: $gui?4:8"] 

temp = [item.split('index:') for item in current_list] 

d = OrderedDict() 

for i in temp: 
    if len(i) == 2: 
     d[i[0]] = i[1] if i[0] not in d else '{}{}'.format(d[i[0]], i[1]) 
    else: 
     d[i[0]] = "" 

new_list = ['{}{}'.format(*item) for item in d.items()] 

輸出:

>>> new_list 
["Blur1['size']: $gui 13", "Blur2['mix']: $gui?4:8"] 
+0

感謝@ettanany,很對於保持訂單有用。非常感激! – Tor

+0

你好歡迎!請讓我知道它是否對您的通用用例不起作用,因爲我僅對您的上面'currentList'進行了測試。例如,如果你有''Blur2 ['mix'],我不知道你的期望是什麼:$ gui?4:8「','」Blur2 ['mix']:$ gui?4:9「'和' 「Blur2 ['mix']:$ gui?3:5」'在你的列表中。 – ettanany

+0

快速測試後似乎工作正常。如果在使用不同參數進行更多測試後遇到問題,我會通知您。謝謝! – Tor

相關問題