【问题标题】:Put multiple lists as value with one list as key将多个列表作为值,以一个列表作为键
【发布时间】:2020-07-21 04:39:40
【问题描述】:

我有 3 个 lists 和一个 string 像这样:

a = ['a', 'b', 'c']
b = [1, 2, 3, 4, 5]
c = [10, 11, 14, 15, 16]

string = 'buy'

我需要一个这样的字典列表:

[{'a':1 , 'b':10 , 'c':'buy'},{'a':2 , 'b':11 , 'c':'buy'},{'a':3 , 'b':14 , 'c':'buy'},...]

【问题讨论】:

    标签: python list dictionary merge


    【解决方案1】:
    result = [ dict(zip(a,[*v, 'buy'])) for v in zip(b,c) ]
    

    【讨论】:

      【解决方案2】:

      这应该可以满足您的需求:

      [{a[0]:vb, a[1]:vc, a[2]:string} for vb, vc in zip(b, c)]
      

      它产生:

      [{'a': 1, 'b': 10, 'c': 'buy'},
       {'a': 2, 'b': 11, 'c': 'buy'},
       {'a': 3, 'b': 14, 'c': 'buy'},
       {'a': 4, 'b': 15, 'c': 'buy'},
       {'a': 5, 'b': 16, 'c': 'buy'}]
      

      它从列表a获取dict键,'buy'来自string

      【讨论】:

        【解决方案3】:

        您可以压缩bc 并使用它来制作字典:

        a = ['a', 'b', 'c']
        b = [1, 2, 3, 4, 5]
        c = [10, 11, 14, 15, 16]
        
        [{'a':a, 'b':b, 'c':'buy'} for a, b, in zip(b,c)]
        

        结果:

        [{'a': 1, 'b': 10, 'c': 'buy'},
         {'a': 2, 'b': 11, 'c': 'buy'},
         {'a': 3, 'b': 14, 'c': 'buy'},
         {'a': 4, 'b': 15, 'c': 'buy'},
         {'a': 5, 'b': 16, 'c': 'buy'}]
        

        如果您想动态包含来自a 的密钥,您也可以使用类似itertools zip_longest 的东西将它们压缩以获取静态字符串:

        from itertools import zip_longest
        
        a = ['a', 'b', 'c']
        b = [1, 2, 3, 4, 5]
        c = [10, 11, 14, 15, 16]
        
        [dict(zip_longest(a, tup, fillvalue='buy')) for tup in zip(b,c)]
        

        同样的结果:

        [{'a': 1, 'b': 10, 'c': 'buy'},
         {'a': 2, 'b': 11, 'c': 'buy'},
         {'a': 3, 'b': 14, 'c': 'buy'},
         {'a': 4, 'b': 15, 'c': 'buy'},
         {'a': 5, 'b': 16, 'c': 'buy'}]
        

        还有一种方法是使用itertools.repeat() 将静态字符串包含在压缩元组中:

        from itertools import repeat
        
        a = ['a', 'b', 'c']
        b = [1, 2, 3, 4, 5]
        c = [10, 11, 14, 15, 16]
        
        [dict(zip(a, tup)) for tup in zip(b,c, repeat('buy'))]
        

        【讨论】:

        • 这确实忽略了第一个列表
        【解决方案4】:

        您可以将zip()list comprehensiondictionary comprehension 用于您的任务

        试试这个:

        a = ['a', 'b', 'c']
        b = [1, 2, 3, 4, 5]
        c = [10, 11, 14, 15, 16]
        
        print([{ a[0]:i, a[1]:j, a[2]:'buy'} for i,j in zip(b,c)])
        

        print([dict(zip(a, [i, j, "buy"])) for i,j in zip(b,c)])
        

        输出:

        [{'a': 1, 'b': 10, 'c': 'buy'}, {'a': 2, 'b': 11, 'c': 'buy'}, {'a': 3, 'b': 14, 'c': 'buy'}, {'a': 4, 'b': 15, 'c': 'buy'}, {'a': 5, 'b': 16, 'c': 'buy'}]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-12-10
          • 2021-10-07
          • 1970-01-01
          • 2022-08-02
          • 2012-05-30
          • 1970-01-01
          • 2019-06-03
          • 2022-07-28
          相关资源
          最近更新 更多