网站首页 > 基础教程 正文
在编程数据处理时,经常能碰到多级包含多类型的字典,例如下图:
客户要求取到所有根部key,value并写入DataFrame中,下面用我的方法来实现:
#新建存放key,value的数组
data = []
#重名计数变量
name_count=1
other_count=1
#取到字典
A=eval(response.text)
d=A["data"]
#循环遍历字典
for k, v in d.items():
#print(k,v)
if isinstance(v, dict):
# 如果字典中的值是字典类型,继续判断是否数组
for sub_k, sub_v in v.items():
#print(type(sub_v))
if isinstance(sub_v, list):
#print(sub_v)
#如果时数组则循环数组
for sub_1_lst in sub_v:
#判断数组中的字典类型
if isinstance(sub_1_lst, dict):
#print(list(sub_v[0].keys()))
#继续循环遍历数组中的每个字典
for sub_1_k, sub_1_v in sub_1_lst.items():
#print(sub_1_k, sub_1_v)
#以下时重名判断,根据需要自定义
if sub_1_k=="name" :
data.append(( sub_1_k+str(name_count), sub_1_v))
name_count+=1
elif sub_1_k=="riskPremSum":
data.append(( sub_1_k+str(other_count), sub_1_v))
other_count+=1
else:
data.append(( sub_1_k, sub_1_v))
#如果不是字典则再次判断是否时数组
elif isinstance(v, list):
# 如果字典中的值是列表类型
for i, item in enumerate(v):
print(i,item)
#继续循环遍历数组中的每个字典
if isinstance(item, dict):
# 如果列表中的元素是字典类型,
for sub_k, sub_v in item.items():
#以下时重名判断,根据需要自定义
if sub_k=="name" :
data.append((sub_k+str(name_count), sub_v))
name_count+=1
elif sub_k=="riskPremSum":
data.append((sub_k+str(other_count), sub_v))
other_count+=1
else:
data.append((sub_k, sub_v))
else:
data.append((k + '.' + str(i), item))
#如果非字典非数组则直接写入
else:
if k=="name" :
data.append((k+str(name_count), v))
name_count+=1
elif k=="riskPremSum":
data.append((k+str(other_count), v))
other_count+=1
else:
data.append((k, v))
结果
写入DataFrame
df=pd.DataFrame({"a":[]})
for ss in data:
#print(ss)
df.loc[0,ss[0]]=ss[1]
df
以上是我个人的笨方法,整体思路就是逐级读取判断,弊端就是字典的层数少,chatGPT给我的是递归方法,我没太理解,同学们如果还有更好的方法欢迎指导,谢谢!
猜你喜欢
- 2025-01-07 Python从入门到放弃-详解列表、元组和字典
- 2025-01-07 python 中字典如何进行复制
- 2025-01-07 python入门023:字典嵌套
- 2025-01-07 掌握Python字典的12个例子
- 2025-01-07 简单学Python——字典的操作1(增加、更改和删除字典元素)
- 2025-01-07 Python之容器拾遗:Python就是包裹在一堆语法糖中的字典
- 2025-01-07 深入了解python字典的有序特性
- 2025-01-07 如何在 Python 中以列表形式返回字典的键
- 2025-01-07 解锁Python字典合并:多种方法解析
- 2025-01-07 Python 动手练:字典
- 05-22Linux cron任务计划
- 05-22测试人员如何在linux服务器中查询mysql日志?
- 05-22Nginx命令最全详解(29个最常用命令)
- 05-22初识自动化网络编排器NSO,轻松配置复杂的多厂商网络
- 05-22Nacos在企业生产中如何使用集群环境?
- 05-22如何从 MySQL 错误日志中排查数据库故障
- 05-22Linux面试最高频的5个基本问题
- 05-22linux网卡混杂模式
- 最近发表
- 标签列表
-
- jsp (69)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- pythonif (86)
- location.href (69)
- dockerexec (65)
- tail-f (79)
- deletesql (62)
- c++模板 (62)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- console.table (62)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)