繁体   English   中英

如何初始化先验未知数量的列表

[英]How to initialize an a priori unknown number of list

我正在尝试用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

PS:如果你知道一种更有效的方法来重新构造一个json,请给我一个链接,例子或者其他东西。 你会注意到我对python“非常初学”。

编辑:输入和输出的示例

originalJson = [{ke1 : value, key2 : value, key3 : value,...},{...},....]

wantedJson = [{key1 : valueX,[{key2 : value, ...},{key3 : value,...},...]},
{key1 : valueY, [...]},{key1 : valueZ,[...]}]

您可以使用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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM