簡體   English   中英

以子列表中的每個項目為鍵的列表列表

[英]List of lists to dict with every item in sublist as key

我想將以下list轉換為以子列表的每個項目為鍵的dict ,值應該是子列表中元素的 rest。

list1 = [[1,2,3],
         [4,5,6]]

成品應如下所示:

dict_of_list = { '1': [(2,3)],
                 '2': [(1,3)],
                 '3': [(1,2)],
                 '4': [(5,6)],
                 '5': [(4,6)],
                 '6': [(4,5)]}

一些嵌套理解應該起作用:

{k: [*filter(k.__ne__, l)] for l in list1 for k in l}
# {1: [2, 3], 2: [1, 3], 3: [1, 2], 4: [5, 6], 5: [4, 6], 6: [4, 5]}

這假設子列表中沒有重復項,因為我們只是在測試其他元素的不等式( k.__ne__ )。 否則:

{
    k: [x for i, x in enumerate(l) if i != j] 
    for l in list1 for j, k in enumerate(l)
}

將工作

您應該在它們的位置周圍使用下標,而不是過濾項目。 這將避免重復項目的任何問題並且更有效:

L = [[1,2,3],
     [4,5,6]]

D = { v:sl[:i]+sl[i+1:] for sl in L for i,v in enumerate(sl) }


# {1: [2, 3], 2: [1, 3], 3: [1, 2], 4: [5, 6], 5: [4, 6], 6: [4, 5]} 
L = [[1,2,3],
     [4,5,6]]

answer = {}
for subl in L:
    for i,k in enumerate(subl):
        answer[k] = [tuple(e for ii,e in enumerate(subl) if i!=ii)]

Output:

In [138]: for k,v in answer.items(): print(k,v)                                                                                                                                                                                                                               
1 [(2, 3)]
2 [(1, 3)]
3 [(1, 2)]
4 [(5, 6)]
5 [(4, 6)]
6 [(4, 5)]

暫無
暫無

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

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