【问题标题】:Combining all combinations of two lists into a dict of special form将两个列表的所有组合组合成一个特殊形式的字典
【发布时间】:2013-08-28 20:30:05
【问题描述】:

我有两个列表:

var_a = [1,2,3,4]

var_b = [6,7]

我想要一个字典列表如下:

result = [{'a':1,'b':6},{'a':1,'b':7},{'a':2,'b':6},{'a':2,'b':7},....]

我认为结果应该很清楚。

【问题讨论】:

  • 你可以在字符串中使用变量名吗?
  • 是的。感谢您的提问。

标签: python list dictionary combinations


【解决方案1】:
[{k:v for k,v in itertools.izip('ab', comb)} for comb in itertools.product([1,2,3,4], [6,7])]

>>> import itertools
>>> [{k:v for k,v in itertools.izip('ab', comb)} for comb in itertools.product([
1,2,3,4], [6,7])]
[{'a': 1, 'b': 6}, {'a': 1, 'b': 7}, {'a': 2, 'b': 6}, {'a': 2, 'b': 7}, {'a': 3
, 'b': 6}, {'a': 3, 'b': 7}, {'a': 4, 'b': 6}, {'a': 4, 'b': 7}]

【讨论】:

    【解决方案2】:
    from itertools import product
    
    a = [1,2,3,4]
    b = [6,7]
    [dict(zip(('a','b'), (i,j))) for i,j in product(a,b)]
    

    产量

    [{'a': 1, 'b': 6},
     {'a': 1, 'b': 7},
     {'a': 2, 'b': 6},
     {'a': 2, 'b': 7},
     {'a': 3, 'b': 6},
     {'a': 3, 'b': 7},
     {'a': 4, 'b': 6},
     {'a': 4, 'b': 7}]
    

    【讨论】:

    • 为什么要对元组进行解包和重新打包?
    • 认为 OP 查看从 product 返回的内容是有益的。与我压缩('a', 'b') 而不是'ab' 的原因相同。
    • 这似乎比@inspectorG4dget 回答的要直观一点(尽管出于某种原因,他获得了更多选票)。谢谢。
    【解决方案3】:

    如果给你变量的名称,你可以使用。

    >>> a = [1,2,3,4]
    >>> b = [6,7]
    >>> from itertools import product
    >>> nameTup = ('a', 'b')
    >>> [dict(zip(nameTup, elem)) for elem in product(a, b)]
    [{'a': 1, 'b': 6}, {'a': 1, 'b': 7}, {'a': 2, 'b': 6}, {'a': 2, 'b': 7}, {'a': 3, 'b': 6}, {'a': 3, 'b': 7}, {'a': 4, 'b': 6}, {'a': 4, 'b': 7}]
    

    【讨论】:

      猜你喜欢
      • 2018-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-03
      • 1970-01-01
      • 2011-07-31
      相关资源
      最近更新 更多