【问题标题】:Python combine items in a dictionaryPython在字典中组合项目
【发布时间】:2018-03-08 22:24:23
【问题描述】:

假设

我有一本字典 A

A={'a':{0:[1,2,3],1:[4,5,6]},'b':{0:['u','v','w'],1:['x','y','z']}}

我想将 'a' 和 'b' 中的所有元素组合起来

那个

[[1,2,3,'u','v','w'],
 [1,2,3,'x','y','z'],
 [4,5,6,'u','v','w'],
 [4,5,6,'x','y','z']]

我试过了:

c=[]
for k,v in A.items():
    for i,t in v.items():
        c.append(t+t)

但它没有给出想要的结果。

【问题讨论】:

    标签: python python-3.x list dictionary combinations


    【解决方案1】:

    作为上述 Ajax1234 概述的 itertools 方法的替代方案,您可以仅使用列表推导式来实现:

    首先将您的 dict 转换为列表列表:

    l_of_l = [list(i.values()) for i in A.values()]
    

    然后将每个子列表与另一个列表迭代结合起来:

    result = [i+v for i in l_of_l[0] for v in l_of_l[1]]
    

    给你这个:

    [[1, 2, 3, 'u', 'v', 'w'], [1, 2, 3, 'x', 'y', 'z'], [4, 5, 6, 'u', 'v', 'w'], [4, 5, 6, 'x', 'y', 'z']]
    

    【讨论】:

      【解决方案2】:

      你可以试试这个:

      import itertools
      A={'a':{0:[1,2,3],1:[4,5,6]},'b':{0:['u','v','w'],1:['x','y','z']}}
      results = [[c for _, c in b.items()] for a, b in A.items() if a in ['a', 'b']]
      last_results = [a+b for a, b in itertools.product(*results)]
      

      输出:

      [[1, 2, 3, 'u', 'v', 'w'], [1, 2, 3, 'x', 'y', 'z'], [4, 5, 6, 'u', 'v', 'w'], [4, 5, 6, 'x', 'y', 'z']]
      

      【讨论】:

        【解决方案3】:

        以防万一有人想为两个以上的嵌套字典实现此目的: 以下代码也适用于这些输入:

        import itertools
        
        input = {'a':{0:[1,2,3],1:[4,5,6]},'b':{0:['u','v','w'], 1:['x','y','z']}}
        list_of_lists = [list(x.values()) for x in input.values()]
        res = [list(itertools.chain.from_iterable(x)) for x in itertools.product(*list_of_lists)]
        print(res)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-01-11
          • 1970-01-01
          • 2022-12-18
          • 1970-01-01
          • 2010-12-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多