2 回答
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 将指向最后一个)
字典可以由任何不可变的数字或字符串索引,但不以任何特定的键顺序存储。(如果对字典进行排序,则需要将其存储为列表以保持顺序,因为排序不会影响底层数据结构)
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>
>
>
>
添加回答
举报