如何将Python字符串表格转换为嵌套字典?
把管道分隔的字符串表格转成嵌套字典
没问题,我来帮你搞定这个转换!你之前用split没成功,大概率是没处理好表格里的空格、分隔线和空行这些细节,咱们一步步来实现:
完整实现代码
# 你的原始字符串 dbresponse = ''' key | account_guid | activation_code | external_id | location --------+--------------+-----------------+-------------+----------- 1.1 | null | 1000005-1212 | 1 | 10.0.9.16 1.4 | null | 500000551212 | 5 | 10.0.9.16 1.6 | null | 700000551212 | 7 | 10.0.9.16 1.5 | null | 400000551212 | 4 | 10.0.9.16 1.1992 | null | 157990235555 | exr498680 | 10.0.9.16 1.3 | null | 200000551212 | 2 | 10.0.9.16 1.2052 | null | 423838550909 | exr084213 | 10.0.9.16 1.2152 | null | 563626550909 | exr350970 | 10.0.9.16 1.1534 | null | 835749550909 | exr245191 | 10.0.9.16 1.161 | null | 547489550909 | exr413464 | 10.0.9.16 1.1955 | null | 961459478950 | exr874895 | 10.0.9.16 1.1812 | null | 535999550909 | exr991462 | 10.0.9.16 1.2153 | null | 525874550909 | exr446117 | 10.0.9.16 1.2 | null | 300000551212 | 3 | 10.0.9.16 1.206 | null | 997141550909 | exr987098 | 10.0.9.16 1.101 | null | 870827550909 | exr867333 | 10.0.9.16 1.302 | null | 938271123405 | exr989961 | 10.0.9.16 1.1795 | null | 360276365614 | exr498651 | 10.0.9.16 1.855 | null | 751409654321 | exr130325 | 10.0.9.16 1.1232 | null | 397846550909 | exr557906 | 10.0.9.16 1.8 | null | 800000551111 | 8 | 10.0.9.16 1.2072 | null | 551260550909 | exr531801 | 10.0.9.16 1.9 | null | 900000551111 | 9 | 10.0.9.16 1.2092 | null | 379419235555 | exr993899 | 10.0.9.16 1.2154 | null | 916479555555 | exr465158 | 10.0.9.16 ''' # 第一步:清理并拆分字符串为行 # 去掉空行和每行前后的空格 lines = [line.strip() for line in dbresponse.split('\n') if line.strip()] # 第二步:提取表头和数据行 # 第一行是表头,拆分后清理每个字段的空格 headers = [col.strip() for col in lines[0].split('|')] # 跳过第二行的分隔线,从第三行开始是数据 data_rows = lines[2:] # 第三步:构建嵌套字典 result_dict = {} for row in data_rows: # 拆分每行数据,清理每个值的空格 row_values = [val.strip() for val in row.split('|')] # 第一个值作为外层字典的key primary_key = row_values[0] # 用表头和对应值配对,生成内层字典 inner_dict = dict(zip(headers[1:], row_values[1:])) # 加入结果字典 result_dict[primary_key] = inner_dict # 验证结果(可选) print(result_dict['1.1'])
关键细节说明
- 清理空行和空格:原始字符串开头有换行,每行的字段前后都有空格,所以先用列表推导式过滤空行,再给每行和每个字段做
strip()处理,避免得到带空格的无效键值。 - 跳过分隔线:表格里的
--------+--------------+...这一行是分隔用的,直接跳过就行。 - 键值配对:用
zip()把表头(从第二个字段开始)和每行的数据值(从第二个开始)配对,快速生成内层字典,比手动逐个赋值高效多了。
可选优化:把字符串null转为Python的None
如果希望表格里的null对应Python的空值,只需要修改拆分数据行的那一行:
row_values = [None if val.strip() == 'null' else val.strip() for val in row.split('|')]
这样转换后的字典里,account_guid的值就会是None而不是字符串'null',更符合Python的编码习惯。
内容的提问来源于stack exchange,提问作者hardik gosai
相关产品推荐
相关产品推荐

