为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕慕森 2023-03-30 10:19:03
我必须像这样构造数据:[新结构]:{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我不知道问题出在哪里。
查看完整描述

2 回答

?
MYYA

TA贡献1868条经验 获得超4个赞

问题出在这两行:


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 将指向最后一个)

  • 字典可以由任何不可变的数字或字符串索引,但不以任何特定的键顺序存储。(如果对字典进行排序,则需要将其存储为列表以保持顺序,因为排序不会影响底层数据结构)


查看完整回答
反对 回复 2023-03-30
?
守候你守候我

TA贡献1802条经验 获得超10个赞

该对象{'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, 

    List<

        Dict<string,

            Dict<int, int>

        >

    >

>


查看完整回答
反对 回复 2023-03-30
  • 2 回答
  • 0 关注
  • 112 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信