我正在尝试用python重构json文件。 json是一个json数组,其中每个元素都是一个字典。在这些词典中,对于一些对我来说很重要的键有很多重复值,所以我想把每个字典的所有其他键放在一个数组中,用于重要键的相同值,创建一个具有不同结构的json
然后对于某些键的每个不同值,我想初始化一个数组。问题是此密钥的不同值的数量是先验未知。我想要的代码示例:
data = json.loads(originalJson)
# List of different authors for key ['author']
authors = []
for x in data:
if x['author'] not in authors:
authors.append(x['author'])
newData = []
for author in authors:
for x in data:
if x['author'] == author:
# And here is the code that initialize
# a different array for each author
P.S。:如果你知道一种更有效的方法来重新组织一个json,请给我一个链接,例子或其他东西。你会注意到我是python的“非常初学者”。
编辑:输入和输出的例子
originalJson = [{ke1 : value, key2 : value, key3 : value,...},{...},....]
wantedJson = [{key1 : valueX,[{key2 : value, ...},{key3 : value,...},...]},
{key1 : valueY, [...]},{key1 : valueZ,[...]}]
答案 0 :(得分:3)
您可以使用collections.defaultdict
,就像这样
from collections import defaultdict
d = defaultdict(list)
for x in data:
d[x['author']].append(x)
每当找到一位不在字典中的作者时,将创建一个新列表并将其用作值,并将当前项追加到列表中。
您也可以使用普通词典(例如
)执行相同的操作d = {}
for x in data:
d.setdefault(x['author'], []).append(x)
如果您想从文件中读取作者的顺序,那么您可以使用collections.OrderedDict
,就像这样
from collections import OrderedDict
d = OrderedDict
for x in data:
d.setdefault(x['author'], []).append(x)