my_list = [
[1, 'green', 'orange', 'blue'],
[2, 'orange', 'black'],
[1, 'green', 'pink' ],
[3, 'white'],
[2, 'purple', 'yellow', 'black']
]
values = set(map(lambda x:x[0], my_list))
newlist = [[x] + list(set(sum([y[1:] for y in my_list if y[0] == x], []))) for x in values]
print newlist
它是如何工作的?
set(map(lambda x:x[0], my_list)
創建一個包含[1, 2, 3]
的集合 - my_list
中每個列表的第一個元素。
然後,我們將values
的每個值使用[___ for x in values]
。
對於值中的每個值,我們遍歷my_list
並添加0
th元素等於x
的所有列表。 (除0
個元素本身,當然)
然後,我們列出的名單列表:
[[['green', 'orange', 'blue'], ['green', 'pink']], [['orange', 'black'], ['purple', 'yellow', 'black']], [['white']]]
所以我們串接使用sum(the_list, [])
每個第三個維度列表。
然後我們要刪除重複項,所以:
list(set(sum(the_list, [])))
我們結束:
[list(set(sum([y[1:] for y in my_list if y[0] == x], []))) for x in values]
而唯一剩下的就是第一個元素(x
本身)添加到任何子列表,所以
[[x] + ... for x in values]
然後我們終於得到:
[[x] + list(set(sum([y[1:] for y in my_list if y[0] == x], []))) for x in values]
它看起來像你想我們爲你寫一些代碼。儘管許多用戶願意爲遇險的編碼人員編寫代碼,但他們通常只在海報已嘗試自行解決問題時才提供幫助。展示這一努力的一個好方法是包含迄今爲止編寫的代碼,示例輸入(如果有的話),期望的輸出以及實際獲得的輸出(輸出,回溯等)。您提供的細節越多,您可能會收到的答案就越多。檢查[FAQ](http://stackoverflow.com/tour)和[如何提問](http://stackoverflow.com/questions/how-to-ask)。 – TigerhawkT3
只需使用'dict'將每個子列表中的第一個元素映射到(一組)其餘元素,然後再回到列表中。 –
在編輯時刪除您的問題通常是一個好主意,可以防止發送垃圾郵件。當您添加了您已經嘗試過的示例時,請重新上傳,以及它爲什麼不起作用。 – Aaron