很抱歉这个模糊的标题,我需要一些关于Python魔术的帮助,我想不出任何更具描述性的东西。在
我有一个固定的JSON数据结构,我需要将CSV文件转换成这个结构。该结构是固定的,但与列表等深度嵌套。与此类似,但更复杂:
{
"foo" : bar,
"baz" : qux,
"nub" : [
{
"bub": "gob",
"nab": [
{
"nip": "jus",
"the": "tip",
},
...
],
},
...
],
"cok": "hed"
}
希望你能明白。单字上的列表列表列表上的列表等等。我的csv可能是这样的:
^{pr2}$抱歉,如果这很难阅读,但基本思想是,如果有一个列出的项目,它将在下一行,并重复值来表示哪些子列表属于什么。在
我不想找任何人来解决这个混乱的问题,也许只是一些关于技术或事情的建议。在
现在我有一个粗略的计划:
我首先将标题转换为包含键的元组列表。对于每一组行(项),我将创建一个模板dict的副本。我有一个函数可以从一组键中设置dict值,除非它找到一个列表。在本例中,我将调用一个有趣的递归函数并将其传递给迭代器,然后继续在该函数中填充dict,并在找到新列表时进行递归调用。在
我也可以做很多硬编码,但有什么乐趣呢?在
这就是我的故事。再说一遍,只是想知道最好的方法是什么。我写这个很快,所以可能有点混乱,请让我知道如果有更多的信息会有帮助。谢谢!在
您的JSON格式不正确。此外,json必须不包含数组才能实现所需的功能。在
会让你变平一些东西,比如:
^{pr2}$比如说:
这些钥匙不保存任何特定的顺序。如果要保持顺序,可以用OrderedDict的构造替换{}。在
假设你有一个这样的平面字典数组:
你可以:
csvlines = []
列表,该列表将保存ur文件的csv行。在keysSet = set()
,它将保存可能的键。在对于以这种方式得到的每个dict,将.keys()添加到集合中。普通集不能保证键顺序;请改用排序集。最后我们得到了第一个CSV行。在
对于您拥有的每个dict(再次迭代),您将生成如下数组:
喂!你的线路在
csvlines
相关问题 更多 >
编程相关推荐