【问题标题】:Flattening a list with a nested dictionary使用嵌套字典展平列表
【发布时间】:2013-11-11 03:04:25
【问题描述】:

我有一个包含嵌套字典的列表:

l =[('M', 1, 2, {'t': (2, 1.0)}), ('L', 2, 4, {'b': (4, 0.25), 'fi': (4, 0.75)}), 
('J', 4, 5, {'a': (5, 0.2), 'w': (5, 0.2), 'wh': (5, 0.4), 'en': (5, 0.2)}),
('T', 4, 6, {'sl': (6, 0.5), 'f': (6, 0.1), 'pz': (6, 0.17), 'al': (6, 0.1)}), 
('P', 5, 5, {'tr': (5, 0.2), 'in': (5, 0.2), 'fa': (5, 0.2), 'if': (5, 0.2)})]

我想整理一下这个列表,以便有一个像这样的简单列表:

[('M', 1, 2, 't', 2, 1.0, 'L', 2, 4, 'b', 4, 0.25, 'fi', 4, 0.7), 
('J', 4, 5, 'a', 5, 0.2, 'w', 5, 0.2, 'wh', 5, 0.4, 'en', 5, 0.2)]

我尝试了一些展平功能,但对如何展平列表中的字典感到困惑。如您所知,我是 python 新手。谁能帮我解决这个问题。

【问题讨论】:

    标签: list python-3.x dictionary


    【解决方案1】:

    我只能想到下面的蛮力方法......

    你给定的迭代器:

     d =[('M', 1, 2, {'t': (2, 1.0)}), ('L', 2, 4, {'b': (4, 0.25), 'fi': (4, 0.75)}), 
    ('J', 4, 5, {'a': (5, 0.2), 'w': (5, 0.2), 'wh': (5, 0.4), 'en': (5, 0.2)}),
    ('T', 4, 6, {'sl': (6, 0.5), 'f': (6, 0.1), 'pz': (6, 0.17), 'al': (6, 0.1)}), 
    ('P', 5, 5, {'tr': (5, 0.2), 'in': (5, 0.2), 'fa': (5, 0.2), 'if': (5, 0.2)})]  
    

    我的解决方案:

    l = [ ]
    for item in d:
        for i in item:
            if type(i) is dict:
                for j in i.items():
                    for p in j:
                        l.append(p) if not isinstance(p,tuple) else [l.extend(k for k in p)]
            else:
                l.append(i)
    
    print l
    

    输出:

    ['M', 1, 2, 't', 2, 1.0, 'L', 2, 4, 'fi', 4, 0.75, 'b', 4, 0.25, 'J', 4, 5, 'a', 5, 0.20000000000000001, 'en', 5, 0.20000000000000001, 'w', 5, 0.20000000000000001, 'wh', 5, 0.40000000000000002, 'T', 4, 6, 'pz', 6, 0.17000000000000001, 'f', 6, 0.10000000000000001, 'al', 6, 0.10000000000000001, 'sl', 6, 0.5, 'P', 5, 5, 'fa', 5, 0.20000000000000001, 'if', 5, 0.20000000000000001, 'tr', 5, 0.20000000000000001, 'in', 5, 0.20000000000000001]  
    

    希望这会有所帮助:)

    【讨论】:

      猜你喜欢
      • 2020-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-03
      • 1970-01-01
      • 2021-09-19
      • 2019-08-25
      • 2021-11-05
      相关资源
      最近更新 更多