首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据字典列表

数据字典列表
EN

Stack Overflow用户
提问于 2021-05-26 11:29:50
回答 1查看 100关注 0票数 0

我试着从字典的列表中找出一个数据。我在这整个编程方面都是新手,而谷歌只是让我更加困惑。这就是为什么我要向你们寻求帮助的原因。前两个列表值(if 01‘,'3nP3RFgGnBrOfILK4DF2Tp)希望在名为: Name和GlobalId的列下。我会欺骗地删除Pset_wallcommon、AC_Pset_RenovationAndPhasing和BaseQuantities,并使用其余的键(如果是它们的名称)作为列名。

如果有人能给我正确的推动,那就太好了:)

记录在案:我正在用IfcOpenshell包解析一个Ifc文件

数据:

[‘AC 01’,'3nP3RFgGnBrOfILK4DF2Tp',{'Pset_WallCommon':{‘可燃’:假,‘分隔’:假,'ExtendToStructure':False,'SurfaceSpreadOfFlame':'',‘热发射’:0.0,‘Reference’,'AcousticRating':‘,'FireRating':'',’承载‘:False’,'IsExternal':False},'AC_Pset_RenovationAndPhasing':{‘Status':'New'},“基本数量”:{“长度”:13786.7314346,“高度”:2700.0,“宽度”:276.0,“Gross足NetSideArea”:3.88131387595,“Net足NetSideArea”:3.88131387595,“GrossSideArea”:37.9693748734,“NetSideArea”:37.9693748734,“Gross卷”:10.4795474651,“NetVolume”:10.4795474651}},“YV01 01”,“1M4JyBhXD5xt8fBFUjUU”,{'Pset_WallCommon':{‘Pset_WallCommon’:{‘可燃’:假,‘划分’:假,‘扩展结构’,‘'SurfaceSpreadOfFlame':'','ThermalTransmittance':0.0,'Reference':'','AcousticRating':'','FireRating':'',’承载‘:False’,'IsExternal':False},'AC_Pset_RenovationAndPhasing':{‘更新状态’:‘新’},‘基本数量级’:{‘长度’:6166.67382573,‘高度’:2700.0,‘宽度’:276.0,'GrossFootprintArea':1.6258259759,“Net足NetSideArea”:1.6258259759,“GrossSideArea”:15.9048193295,“NetSideArea”:15.9048193295,“Gross音量”:4.38973013494,“NetVolume”:4.38973013494}}

代码语言:javascript
复制
all_walls = ifc_file.by_type('IfcWall')
wallList = []

for wall in all_walls:
    propertySets = (ifcopenshell.util.element.get_psets(wall))
    wallList.append(wall.Name)
    wallList.append(wall.GlobalId)
    wallList.append(propertySets)
print(wallList)

wall_table = pd.DataFrame.from_records(wallList)
print(wall_table)

我已经尝试过这些基本的pd.DataFrame.From_dict/记录器/数组(数据),但是输出如下所示

在这里输入图像描述

更新:非常感谢你的帮助,我从中学到了很多东西!所以我用wallList做了一本字典,把字典压平了。就像这样:

代码语言:javascript
复制
 #list of walls
    for wall in all_walls:
        propertySets = (ifcopenshell.util.element.get_psets(wall))
        wallList.append(wall.Name)
        wallList.append(wall.GlobalId)
        wallList.append(propertySets)
    
    #dict from list
    wall_dict = {i: wallList[i] for i in range(0, len(wallList))}
    
    new_dict = {}
    #flattening dict
    for key, value in wall_dict.items():
        if isinstance(value, dict):
            for key in value.keys():
                for key2 in value[key].keys():
                    new_dict[key + '_' + key2] = value[key][key2]
        else:
            new_dict[key] = value
    
    
    wall_table = pd.DataFrame.from_dict(new_dict, orient='index')
    
    print(wall_table)

它看起来工作得很好,唯一的问题是dataframe包含所有的墙壁,但是只有列表中第一个的属性集数据。我似乎不明白dict扁平循环是如何工作的。我还希望索引名(Pset_WallCommon_Combustible,等等)成为我的dataframe中的列。这有可能吗?

在这里输入图像描述

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-26 12:50:52

编辑:简单地压平一个列表,因为我没有去任何地方。实际上,我认为您应该完全放弃这个列表,并尝试从一个字典加载Dataframe。我们需要看看all_walls是什么样子来帮助你,所以。

您是否尝试过将all_walls字典直接加载到dataframe:df = pd.Dataframe.from_dict(all_walls)中?

我认为如果这不起作用的话,用类似于下面的方式来平版字典就可以了。

代码语言:javascript
复制
new_dict = {}
for key, value in all_walls.items():
    if isinstance(value, dict):
        for key in value.keys():
            for key2 in value[key].keys():
                new_dict[key + '_' + key2] = value[key][key2]
    else:
        new_dict[key] = value
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67703975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档