繁体   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