在没有for循环的情况下循环使用list元素

时间:2017-10-22 19:52:03

标签: python

我有一个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字典键和列表元素)。有没有更好的方法来迭代每个列表值而不使用嵌套循环?我应该重做我存储值的方式(除了列表字典之外的其他一些数据类型)吗?
  3. 我正在寻找一种在时间和空间方面计算成本低廉的解决方案。

    编辑:

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

    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)
    

1 个答案:

答案 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