Python 将集合列表转换为字典

Python 将集合列表转换为字典,python,list,dictionary,set,Python,List,Dictionary,Set,我有一个元组列表,如下所示: l=[(5, 8),(5, 9),(5, 22),(5, 6),(1, 5),(4, 5),(3, 5),(2, 5),(8, 22),(9, 22)] 我想为每个值生成一个字典;我把它出现的值,例如8,我将有[5,22] 这应该是最终结果: {1: [5], 2: [5], 3: [5], 4: [5], 5: [8, 9, 22, 6, 1, 4, 3, 2], 6: [5], 8: [5, 22], 9: [5, 22], 22: [5, 8

我有一个元组列表,如下所示:

l=[(5, 8),(5, 9),(5, 22),(5, 6),(1, 5),(4, 5),(3, 5),(2, 5),(8, 22),(9, 22)]
我想为每个值生成一个字典;我把它出现的值,例如8,我将有[5,22]

这应该是最终结果:

{1: [5],
 2: [5],
 3: [5],
 4: [5],
 5: [8, 9, 22, 6, 1, 4, 3, 2],
 6: [5],
 8: [5, 22],
 9: [5, 22],
 22: [5, 8, 9]}
我这样做,它是正确的工作,但我觉得它没有优化和“硬编码”有更好的版本吗

dic={}
for n in set([item  for sublist in l for item in sublist]):
        ll=[]
        for item in  [sublist for sublist in l]:
            if n in item :
                ll.append(item[list({0,1}-{item.index(n)})[0]])
        dic[n]=ll
        

下面是我应该如何做的,它似乎比您的实际代码清楚得多:

l=[(5,8)、(5,9)、(5,22)、(5,6)、(1,5)、(4,5)、(3,5)、(2,5)、(8,22)、(9,22)]
结果={}
对于l中的(i,v):
如果结果是:
结果[i]。追加(v)
其他:
结果[i]=[v]
如果结果为v:
结果[v]。追加(i)
其他:
结果[v]=[i]
打印(结果)#{5:[8,9,22,6,1,4,3,2],8:[5,22],9:[5,22],22:[5,8,9],6:[5],1:[5],4:[5],3:[5],2:[5]}

下面是我应该怎么做的,它似乎比您的实际代码更清晰:

l=[(5,8)、(5,9)、(5,22)、(5,6)、(1,5)、(4,5)、(3,5)、(2,5)、(8,22)、(9,22)]
结果={}
对于l中的(i,v):
如果结果是:
结果[i]。追加(v)
其他:
结果[i]=[v]
如果结果为v:
结果[v]。追加(i)
其他:
结果[v]=[i]
打印(结果)#{5:[8,9,22,6,1,4,3,2],8:[5,22],9:[5,22],22:[5,8,9],6:[5],1:[5],4:[5],3:[5],2:[5]}
您可以使用:

输出:

defaultdict(,
{1: [5],
2: [5],
3: [5],
4: [5],
5: [8, 9, 22, 6, 1, 4, 3, 2],
6: [5],
8: [5, 22],
9: [5, 22],
22: [5, 8, 9]})
您可以使用:

输出:

defaultdict(,
{1: [5],
2: [5],
3: [5],
4: [5],
5: [8, 9, 22, 6, 1, 4, 3, 2],
6: [5],
8: [5, 22],
9: [5, 22],
22: [5, 8, 9]})
l=[(5,8)、(5,9)、(5,22)、(5,6)、(1,5)、(4,5)、(3,5)、(2,5)、(8,22)、(9,22)]
d={}
对于l中的i,j:
d、 setdefault(i,[])。追加(j)
d、 setdefault(j,[])。追加(i)
D
l=[(5,8)、(5,9)、(5,22)、(5,6)、(1,5)、(4,5)、(3,5)、(2,5)、(8,22)、(9,22)]
d={}
对于l中的i,j:
d、 setdefault(i,[])。追加(j)
d、 setdefault(j,[])。追加(i)
D

也许试试codereview.stackexchange.com?谢谢,是的,下次我会问那里,我不知道,对不起,也许试试codereview.stackexchange.com?谢谢,是的,下次我会问那里,我不知道,对不起
import pprint
from collections import defaultdict
l=[(5, 8),(5, 9),(5, 22),(5, 6),(1, 5),(4, 5),(3, 5),(2, 5),(8, 22),(9, 22)]

d = defaultdict(list)
for key, value in l:
    d[key].append(value)
    d[value].append(key)

pprint.pprint(d)
defaultdict(<class 'list'>,
            {1: [5],
             2: [5],
             3: [5],
             4: [5],
             5: [8, 9, 22, 6, 1, 4, 3, 2],
             6: [5],
             8: [5, 22],
             9: [5, 22],
             22: [5, 8, 9]})
{5: [8, 9, 22, 6, 1, 4, 3, 2],
 8: [5, 22],
 9: [5, 22],
 22: [5, 8, 9],
 6: [5],
 1: [5],
 4: [5],
 3: [5],
 2: [5]}