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]}