展平包含列表和元组列表的字典

时间:2019-09-03 04:25:09

标签: python python-3.x list dictionary flatten

from numpy import nan
d = {'E1': (((((['C', 'Me', 'Lans'], float(nan), ['3050', '55901']),
     float(nan)),
    float(nan)),
   ['2011-09-05 00:00:00', '3050-09-02 00:00:00']),
  ['2011-09-05 00:00:00', '3050-09-02 00:00:00']),
 'E2': (((((['Can', 'Mar', 'Horns'], ['26D']),
      ['1001', '14086']),
     float(nan),
    ['(100) 300-2345']),
   ['1001-09-02 00:00:00', '0100-09-02 00:00:00', '2011-19-26 00:00:00']),
  ['1001-09-02 00:00:00', '0100-09-02 00:00:00', '2011-19-26 00:00:00'])}

我的字典d看起来很乱。我想要以下输出,其中d是字典中的列表

d = {'E1': ['C', 'Me', 'Lans', float(nan),'3050', '55901', float(nan)), float(nan), '2011-09-05 00:00:00', '3050-09-02 00:00:00',
            '2011-09-05 00:00:00', '3050-09-02 00:00:00'],
     'E2': ['Can', 'Mar', 'Horns', '26D','1001', '14086', float(nan),'100 300-2345','1001-09-02 00:00:00', '0100-09-02 00:00:00', '2011-19-26 00:00:00',
             '1001-09-02 00:00:00', '0100-09-02 00:00:00', '2011-19-26 00:00:00']}

我已经尝试过代码Flatten nested dictionaries, compressing keys,但是它并没有给我我想要的东西。任何身体都可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

您可以使用递归拉平列表和元组的函数:

def flatten(o):
    return [s for i in o for s in flatten(i)] if isinstance(o, (list, tuple)) else [o]

使{k: flatten(v) for k, v in d.items()}返回:

{'E1': ['C',
        'Me',
        'Lans',
        nan,
        '3050',
        '55901',
        nan,
        nan,
        '2011-09-05 00:00:00',
        '3050-09-02 00:00:00',
        '2011-09-05 00:00:00',
        '3050-09-02 00:00:00'],
 'E2': ['Can',
        'Mar',
        'Horns',
        '26D',
        '1001',
        '14086',
        nan,
        '(100) 300-2345',
        '1001-09-02 00:00:00',
        '0100-09-02 00:00:00',
        '2011-19-26 00:00:00',
        '1001-09-02 00:00:00',
        '0100-09-02 00:00:00',
        '2011-19-26 00:00:00']}