我有一个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]}
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)
答案 0 :(得分:0)
您可以使用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