【问题标题】:Generating a list from complex dictionary从复杂字典生成列表
【发布时间】:2010-11-24 12:49:54
【问题描述】:

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

【问题讨论】:

    标签: python-3.x python


    【解决方案1】:

    给定一个列表:

    >>> 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() 从字典中以列表形式返回 (key, value) 对。因此,此代码将提取字典中的每个键并将其与如上生成的列表配对。

    【讨论】:

    • 在 Python 3 中,也可以在字典理解中执行此操作,如果应该首选字典结果 - 看起来像:{k: [x[1] for x in v] for k, v in dict1.items()}
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      如你所见:

      • dict1.values() 只为您获取 dict 中的值,
      • for pairlist in dict1.values() 为您提供所有配对列表,
      • for pair in pairlist 为您提供每个列表中的所有配对,
      • pair[1] 为您获取每对中的第二个值。

      试试看。 Python shell 是你的朋友!...

      >>> 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爱你!

      【讨论】:

        猜你喜欢
        • 2021-01-23
        • 1970-01-01
        • 2020-01-28
        • 2020-08-09
        • 2018-09-06
        • 2019-05-09
        • 1970-01-01
        • 1970-01-01
        • 2014-05-17
        相关资源
        最近更新 更多