Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将excel数据转换为嵌套的dict和list_Python_Excel_Dictionary_Data Structures - Fatal编程技术网

Python 将excel数据转换为嵌套的dict和list

Python 将excel数据转换为嵌套的dict和list,python,excel,dictionary,data-structures,Python,Excel,Dictionary,Data Structures,这与我昨天的问题几乎相同。但我认为使用唯一的值列表来创建嵌套的dict&list结构是理所当然的。但是,接下来,我遇到了如何从excel数据逐行构建这个dict&list结构(称为数据结构)的问题 excel文件(文件夹中的多个文件)的外观如下所示: Category Subcategory Name Main Dish Noodle Tomato Noodle Main Dish Stir Fry Chicken Rice Main Dish

这与我昨天的问题几乎相同。但我认为使用唯一的值列表来创建嵌套的dict&list结构是理所当然的。但是,接下来,我遇到了如何从excel数据逐行构建这个dict&list结构(称为数据结构)的问题

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
我想要的dict和list结构是:

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}]
因此,对于每个excel文件,只需循环并设置
{'data':0,'Category':[]},{'data':1,'Category':[]}
等即可。关键是,对于每个
类别
子类别
值,
主菜
在excel中有三个条目,但在数据结构中只需要一个;
饮料
在excel中有两个条目,但在数据结构中只有一个条目。对于嵌套在类别列表中的每个子类别,它们遵循相同的规则,只有唯一的值才能嵌套到类别中。然后,每个对应的
菜名
,根据其类别和子类别进入数据结构

问题是,我找不到更好的方法将数据转换为此数据结构。另外,在
名称
列之后还有其他列。所以它有点复杂。我想首先从category和subcategory的整个列中提取唯一的值,这简化了过程,但在填充相应的名称值时会出现问题。如果我是从一行一行的方法来做这件事,那么根据我目前的编程技巧,设计一个If子类别存在或类别退出测试来保持唯一的值在某种程度上是困难的


因此,将此excel文件转换为此类数据结构的最佳方法是什么?非常感谢。

一种方法可以是使用pandas将excel文件读入数据帧,然后在这个极好的答案的基础上构建


你试过自己做吗?失败的代码在哪里?是的,当测试一个类别是否已经存在时,我总是遇到列表索引超出范围,测试本身变得相当复杂。然后有很多专栏需要做这个测试…所以我开始思考是否有更好的方法
import pandas as pd
excel_file = 'path-to-your-excel.xls'

def fdrec(df):
    drec = dict()
    ncols = df.values.shape[1]
    for line in df.values:
        d = drec
        for j, col in enumerate(line[:-1]):
            if not col in d.keys():
                if j != ncols-2:
                    d[col] = {}
                    d = d[col]
                else:
                    d[col] = line[-1]
            else:
                if j!= ncols-2:
                    d = d[col]
    return drec

df = pd.read_excel(excel_file)

print(fdrec(df))