【问题标题】:How to flatten a "complex" dictionary into a list如何将“复杂”字典展平为列表
【发布时间】:2015-12-20 13:38:25
【问题描述】:

我有以下字典结构:

{'AA': [('No Av', 'Ave', 3.35, 'Max', 0.9, 'Min', -6.8), ('analist disp:', -5.0), u' AA: Jan 11, 2016\t\t\t']}

在哪里

u' AA: Jan 11, 2016\t\t\t' 

只是一个 unicode 字符串。

我想将它展平成这样的列表:

['AA', 'No Av', 'Ave', 3.35, 'Max', 0.9, 'Min', -6.8, 'analist disp:', -5.0, u' AA: Jan 11, 2016\t\t\t']

我尝试了很多替代方案,但没有任何效果。

【问题讨论】:

    标签: python list python-2.7 dictionary


    【解决方案1】:

    定义递归字典值的递归函数:

    d = {'AA': [('No Av', 'Ave', 3.35, 'Max', 0.9, 'Min', -6.8),
                ('analist disp:', -5.0), u' AA: Jan 11, 2016\t\t\t']}
    
    
    def flat(xs):
        for x in xs:
            if isinstance(x, (list, tuple)):
                for y in flat(x):
                    yield y
            else:
                yield x
    
    # If there's only one item in the dictionary
    next([key] + list(flat(value)) for key, value in d.items())
    # => ['AA', 'No Av', 'Ave', 3.35, 'Max', 0.9, 'Min', -6.8, 'analist disp:',
    #     -5.0, u' AA: Jan 11, 2016\t\t\t']
    

    如果有多个项目,请改用以下内容:

    import itertools
    list(itertools.chain.from_iterable(
        [key] + list(flat(value)) for key, value in d.items()
    ))
    # => ['AA', 'No Av', 'Ave', 3.35, 'Max', 0.9, 'Min', -6.8, 'analist disp:',
    #     -5.0, u' AA: Jan 11, 2016\t\t\t']
    

    【讨论】:

    • 感谢您的替代方案和扩展!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-26
    • 1970-01-01
    • 2019-01-10
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 2018-07-19
    相关资源
    最近更新 更多