将嵌套字典转换为元组列表

2024-06-16 10:52:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个dictionary-

d={'revenues':
             {
              '201907':
                      {'aaa.csv':'fdwe34x2'},
              '201906':{'ddd.csv':'e4c5q'}
             },    
   'complaints':
             {'2014':
                    {'sfdwa.csv','c2c2jh'}
             }
  }

我想把它转换成listtuples-

[
 ('revenues','201907','aaa.csv','fdwe34x2'),
 ('revenues','201906','ddd.csv','e4c5q'),
 ('complaints','2014','sfdwa.csv','c2c2jh')
]

我试过使用list comprehensions,但没有帮助-

l = [(k,[(p,q) for p,q in v.items()]) for k,v in d.items()]
print(l)
    [('revenues', [('201907', {'aaa.csv': 'fdwe34x2'}), ('201906', {'ddd.csv': 'e4c5q'})]),
     ('complaints', [('2014', {'c2c2jh', 'sfdwa.csv'})])]

有什么建议吗?你知道吗


Tags: csvinfordictionaryitemslistdddaaa
2条回答

如果您不确定此列表可能有多少级别,那么您需要的似乎是递归:

def unnest(d, keys=[]):
    result = []
    for k, v in d.items():
        if isinstance(v, dict):
            result.extend(unnest(v, keys + [k]))
        else:
            result.append(tuple(keys + [k, v]))
    return result

只是一个友好的提醒:在python3.6之前,dict顺序是不维护的。你知道吗

[('complaints', '2014', 'sfdwa.csv', 'c2c2jh'),
 ('revenues', '201906', 'ddd.csv', 'e4c5q'),
 ('revenues', '201907', 'aaa.csv', 'fdwe34x2')]

您可以循环浏览词典的各个级别:

[(x, y, z) for x in d for y in d[x] for z in d[x][y]]

相关问题 更多 >