代码之家  ›  专栏  ›  技术社区  ›  Prabhu

从复杂字典生成列表

  •  2
  • Prabhu  · 技术社区  · 15 年前

    我有一本字典 dict1['a'] = [ [1,2], [3,4] ] 需要从中生成一个列表 l1 = [2, 4] . 也就是说,每个内部列表的第二个元素中都有一个列表。它可以是一个单独的列表,甚至字典也可以修改为 dict1['a'] = [2,4] .

    3 回复  |  直到 12 年前
        1
  •  2
  •   eksortso    15 年前

    假设字典中的每个值都是成对的列表,那么应该这样做:

    [pair[1] for pairlist in dict1.values() for pair in pairlist]
    

    正如你所看到的:

    • dict1.values() 让你得到你口述中的价值观,
    • for pairlist in dict1.values() 获取所有配对列表,
    • for pair in pairlist 把每个列表中的所有对都给你,
    • pair[1] 获取每对中的第二个值。

    试试看。巨蟒壳是你的朋友!…

    >>> dict1 = {}
    >>> dict1['a'] = [[1,2], [3,4]]
    >>> dict1['b'] = [[5, 6], [42, 69], [220, 284]]
    >>> 
    >>> dict1.values()
    [[[1, 2], [3, 4]], [[5, 6], [42, 69], [220, 284]]]
    >>> 
    >>> [pairlist for pairlist in dict1.values()]
    [[[1, 2], [3, 4]], [[5, 6], [42, 69], [220, 284]]]
    >>> # No real difference here, but we can refer to each list now.
    >>> 
    >>> [pair for pairlist in dict1.values() for pair in pairlist]
    [[1, 2], [3, 4], [5, 6], [42, 69], [220, 284]]
    >>> 
    >>> # Finally...
    >>> [pair[1] for pairlist in dict1.values() for pair in pairlist]
    [2, 4, 6, 69, 284]
    

    当我在做的时候,我会说: ipython 爱你!

        2
  •  8
  •   John Fouhy    15 年前

    给出一个列表:

    >>> lst = [ [1,2], [3,4] ]
    

    通过简单的列表理解,可以提取每个子列表的第二个元素:

    >>> [x[1] for x in lst]
    [2, 4]
    

    如果要对字典中的每个值执行此操作,可以对字典进行迭代。我不确定你到底想要什么样的最终数据,但是像这样的数据可能有帮助:

    >>> dict1 = {}
    >>> dict1['a'] = [ [1,2], [3,4] ]
    >>> [(k, [x[1] for x in v]) for k, v in dict1.items()]   
    [('a', [2, 4])]
    

    dict.items() 以列表形式从字典返回(键、值)对。因此,这段代码将提取字典中的每个键,并将其与上面生成的列表配对。

        3
  •  0
  •   Alex Martelli    15 年前

    第二个元素的列表 每个内部列表

    听起来像 [sl[1] for sl in dict1['a']] --那么问题是什么?!)