我不知道如何处理这种结构

我必须像这样构造数据:


[新结构]:


{name:[{base_name1:[{'date', date}, {c:s}], base_name2:[{'date', date}, {c:s}]}]}

我需要从如下结构中解析它:


[旧结构]


{name: [{base: {calls: success}}]} 

base_name其中 base 是一个包含和的字符串date。我有一个示例代码,但它不起作用。


mp, op = {}, {}

print(b)

for name, base in summary.items():

        for b in base:

            pr = list(b.keys())[0]

            pr_date = pr[len(pr) - 10:]

            pr = pr[:-10]

            if pr_date >= start_date:

                mp.update({name: []})

                mp[name].append({pr: []})

                mp[name][pr].append({'date': pr_date}, {list(list(b.values())[0].keys())[0]: list(list(b.values())[0].values())[0]})

            else:

                print('1')

但它显示:


 TypeError: list indices must be integers or slices, not str

我不知道问题出在哪里。


慕慕森
浏览 113回答 2
2回答

MYYA

问题出在这两行:mp[name].append({pr: []})mp[name][pr].append({'date': pr_date}, {list(list(b.values())[0].keys())[0]: list(list(b.values())[0].values())[0]})首先,您将 mp[name] 设置为具有两个嵌套结构,一个包含字典的列表(pr 是字典的索引,内部结构),但您尝试使用 pr 来索引列表而不是字典。假设您的 NEW_STRUCTURE 是 ... {'date': date} ...(冒号而不是逗号,因此 base_name1 指向字典列表)。尝试:mp, op = {}, {}for name, base in summary.items():    mp[name] = []    for b in base:        pr = list(b.keys())[0]        pr_date = pr[len(pr) - 10:]        if pr_date >= start_date:                        mp[name].append({name:[{'date': pr_date}, b[pr]]})        else:            print('1')        还有一点关于索引:列表由始终从 0 开始的连续整数级数索引。(如果您以不同的方式对列表进行排序,0 将始终指向第一个项目,1 将指向第二个...,-1 将指向最后一个)字典可以由任何不可变的数字或字符串索引,但不以任何特定的键顺序存储。(如果对字典进行排序,则需要将其存储为列表以保持顺序,因为排序不会影响底层数据结构)

守候你守候我

该对象{'cadillac': [{'cadillac from 17-07-2020': {68: 0}}, {'cadillac from 20-07-2020': {44: 0}}, {'cadillac from 20-07-2020': {1: 0}}, {'cadillac from от 17.07': {19: 0}}, {'cadillac from 16.07': {6: 0}}]}是一个字典,其中一个字符串作为键,一个字典的字典列表作为一个值。让我们打开包装:>>> sample = {'cadillac': [{'cadillac from 17-07-2020': {68: 0}}, {'cadillac from 20-07-2020': {44: 0}}, {'cadillac from 20-07-2020': {1: 0}}, {'cadillac from от 17.07': {19: 0}}, {'cadillac from 16.07': {6: 0}}]}>>> sample.keys()dict_keys(['cadillac'])顶层只有一个键,'cadillac'。>>> sample['cadillac'][{'cadillac from 17-07-2020': {68: 0}}, {'cadillac from 20-07-2020': {44: 0}}, {'cadillac from 20-07-2020': {1: 0}}, {'cadillac from от 17.07': {19: 0}}, {'cadillac from 16.07': {6: 0}}]该值是字典列表。您需要使用整数索引索引到列表中。我认为这就是您原来的错误发生的原因——您没有考虑到额外的结构层。>>> sample['cadillac'][0]{'cadillac from 17-07-2020': {68: 0}}现在你需要使用这个字典中的键来获取内部字典中的值。>>> sample['cadillac'][0]['cadillac from 17-07-2020']{68: 0}最后,您可以使用整数键来获取最里面的值。>>> sample['cadillac'][0]['cadillac from 17-07-2020'][68]0如果您喜欢考虑数据类型,请考虑如果我尝试用 C++ 编写此代码,我将不得不声明一个看起来很像的对象Dict<string, List<Dict<string, Dict<int, int>>>>(假设我已经为我们的目的创建了 Dict 和 List 类)。您可以通过这种方式更好地查看数据的嵌套结构:Dict<string,&nbsp;&nbsp; &nbsp; List<&nbsp; &nbsp; &nbsp; &nbsp; Dict<string,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Dict<int, int>&nbsp; &nbsp; &nbsp; &nbsp; >&nbsp; &nbsp; >>
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python