gpt4 book ai didi

Python defaultdict 深层嵌套数据结构

转载 作者:行者123 更新时间:2023-12-01 01:34:37 36 4
gpt4 key购买 nike

我有一个 Excel 数据集列表,其中包含以下某些信息:

Category    Subcategory    Name
Main Dish Noodle Tomato Noodle
Main Dish Stir Fry Chicken Rice
Main Dish Soup Beef Goulash
Drink Wine Bordeaux
Drink Softdrink Cola

假设上面的数据集只是其中一个数据集,我想要的使用嵌套字典和列表的数据结构是:

data = {0:{'data':0, 'Category':[
{'name':'Main Dish', 'Subcategory':[
{'name':'Noodle', 'key':0, 'data':['key':1, 'title':'Tomato Noodle']},
{'name':'Stir Fry', 'key':1, 'data':['key':2, 'title':'Chicken Rice']},
{'name':'Soup', 'key':2, 'data':['key':3, 'title':'Beef Goulash']}]},
{'name':'Drink', 'Subcategory':[
{'name':'Wine', 'key':0, 'data':['key':1, 'title':'Bordeaux']},
{'name':'Softdrink', 'key':1, 'data':['key':2, 'title':'cola'}]}]},
1:{'data':1, 'Category':.........#Same structure as dataset 0}}

所以基本上,整个类别是一个defaultdict(list),每个不同的类别在整个类别列表中形成一个字典。不同的子类别也是如此,但子类别遵循类别。

我尝试使用defaultdict来做到这一点,这是我的代码:

from collections import defaultdict
data = defaultdict(dict)
cateList = ["Main Dish", "Drink"]
n = 3 # n means the number of datasets
for i in range(n):
data[i]['data'] = i
data[i]['category'] = defaultdict(list)
for j in range(len(cateList)):
data[i]['category'][j]['name'] = cateList[j]
data[i]['category'][j]['subcategory'] = defaultdict(list)
data

但我收到以下错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-81-298f7ff30c6a> in <module>()
5 data[i]['category'] = defaultdict(list)
6 for j in range(len(cateList)):
----> 7 c
8 data[i]['category'][j]['subcategory'] = defaultdict(list)
9 data

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

这是在 Jupyter Notebook 中执行的,它似乎不允许我以这种方式指示嵌套的 defaultdict: data[i]['category'][j]['name'] = cateList[j ]。所以我不太确定如何构造上述数据结构......有更好的方法吗?

非常感谢您的帮助。

最佳答案

您的规范规定您希望'Category'引用列表:

data = {0:{'data':0, 'Category':[
# ^ a list opening bracket

但是,您的代码使其成为字典:

data[i]['category'] = defaultdict(list) 

但是代码的其余部分会尝试使用 j 作为索引,再次将 'category' 对象视为列表。因为它是一个字典,所以表达式 data[i]['category'][j] 生成一个列表,并且 data[i]['category'][j]['name ']data[i]['category'][j]['subcategory'] 尝试使用字符串索引该列表。

构建这个结构确实不需要defaultdict;您已经知道您想要构建数据,并且您正在使用循环构建嵌套结构。您可以只使用常规词典和列表:

cateList = ["Main Dish", "Drink"]
n = 3 # n means the number of datasets

data = {}
for i in range(n):
data[i] = {
'data': i,
'category': []
}
category = data[i]['category']
for name in cateList:
category.append({
'name': name,
'subcategory': []
})

我不太清楚为什么你要构建一个从 0 开始的整数键的外部字典。你也可以将其设为一个列表。

关于Python defaultdict 深层嵌套数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52505438/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com