在没有for循环的情况下循环列表元素



我有一个Python字典,其中有多个值存储为如下列表-

{'a': [1, 2, 3], 'b': [2, 3, 4], 'c': [3, 4, 5]}

我希望创建一个列表字典,其中每个值都成为一个键,并将列表存储为类似的值

if __name__=='__main__':
x={'a':[1,2,3],'b':[2,3,4],'c':[3,4,5]}
d=dict()
for key,value in x.items():
for i in value:
if i not in list(d.keys()):
d[i]=value
else:
d[i].extend(value)
print(d)

我得到以下输出-

{1: [1, 2, 3, 2, 3, 4], 2: [1, 2, 3, 2, 3, 4], 3: [3, 4, 5, 1, 2, 3, 2, 3, 4, 2, 3, 4], 4: [3, 4, 5, 1, 2, 3, 2, 3, 4, 2, 3, 4], 5: [3, 4, 5, 1, 2, 3, 2, 3, 4, 2, 3, 4]}

我希望输出像这样-

{1: [1, 2, 3], 2: [2, 3, 4, 1, 2, 3], 3: [2, 3, 4, 3, 4, 5, 1, 2, 3], 4: [2, 3, 4, 3, 4, 5], 5: [3, 4, 5]}
  1. 我的代码中的错误在哪里
  2. 我希望避免嵌套的for循环,因为我必须迭代大量的值(x字典键和列表元素)。有没有更好的方法可以在不使用嵌套循环的情况下迭代每个列表值?我应该重做存储值的方式吗(除了列表字典之外的其他数据类型)

我正在寻找一种在时间和空间方面计算成本低廉的解决方案。

编辑:

通过复制列表,代码返回正确的输出-

if __name__=='__main__':
x={'a':[1,2,3],'b':[2,3,4],'c':[3,4,5]}
d=dict()
for key,value in x.items():
for i in value:
if i not in list(d.keys()):
d[i]=list(value)
else:
d[i].extend(value)
print(d)

您可以使用defaultdict:

from collections import defaultdict
x={'a':[1,2,3],'b':[2,3,4],'c':[3,4,5]}
d=defaultdict(list)
for key,value in x.items():
for i in value:
d[i] += value

for value in x.values():
for i in value:
d[i] += value

最新更新