在python中打印嵌套字典并将其全部导出到csv文件中

时间:2019-03-22 11:31:32

标签: python csv dictionary

我有一本这样的字典:

{'https://github.com/project1': {'Batchfile': '91', 'Gradle': '110', 'INI': '25', 'Java': '1879', 'Markdown': '393', 'QMake': '52', 'Shell': '161', 'Text': '202', 'XML': '943'}}
{'https://github.com/project2': {'Batchfile': '91', 'Gradle': '123', 'INI': '25', 'Java': '1305', 'Markdown': '121', 'QMake': '52', 'Shell': '161', 'XML': '234'}}
{'https://github.com/project3': {'Batchfile': '91', 'Gradle': '360', 'INI': '27', 'Java': '805', 'Markdown': '27', 'QMake': '156', 'Shell': '161', 'XML': '380'}}

它是通过这种方式构造的:

{'url': {'lang1': 'locs', 'lang2': 'locs', ...}}
{'url2': {'lang6': 'locs', 'lang5': 'locs', ...}}

其中lang用于语言,而locs用于代码行(与以前的语言相关)。

我想做的就是以一种漂亮的方式打印这本词典,这样我可以在导出之前看到结果。 之后,我想将字典导出到csv文件中以进行其他操作。问题是语言未排序。那是我的意思:

{'https://github.com/Project4': {'HTML': '29', 'Java': '229', 'Markdown': '101', 'Maven POM': '88', 'XML': '62'}}
{'https://github.com/Project5': {'Batchfile': '85', 'Gradle': '84', 'INI': '22', 'Java': '2422', 'Markdown': '25', 'Prolog': '25', 'Shell': '173', 'XML': '3243', 'YAML': '43'}}

有什么主意吗?

1 个答案:

答案 0 :(得分:0)

您可以使用pandas

import pandas as pd

t = [{'https://github.com/project1': {'Batchfile': '91', 'Gradle': '110', 'INI': '25', 'Java': '1879', 'Markdown': '393', 'QMake': '52', 'Shell': '161', 'Text': '202', 'XML': '943'}},
{'https://github.com/project2': {'Batchfile': '91', 'Gradle': '123', 'INI': '25', 'Java': '1305', 'Markdown': '121', 'QMake': '52', 'Shell': '161', 'XML': '234'}},
{'https://github.com/project3': {'Batchfile': '91', 'Gradle': '360', 'INI': '27', 'Java': '805', 'Markdown': '27', 'QMake': '156', 'Shell': '161', 'XML': '380'}}]


columns = set([lang for x in t for l in x.values() for lang in l])
index = [p for x in t for p in x.keys()]
rows = [l for x in t for l in x.values() ]

df = pd.DataFrame(rows, columns=columns, index=index).fillna('N/A')

df.to_csv('projects.csv')

哪个给:

>>> df
                            Gradle INI Markdown  ... Batchfile  Java QMake
https://github.com/project1    110  25      393  ...        91  1879    52
https://github.com/project2    123  25      121  ...        91  1305    52
https://github.com/project3    360  27       27  ...        91   805   156

[3 rows x 9 columns]

在csv中:

enter image description here