网站首页 > 基础教程 正文
在编程数据处理时,经常能碰到多级包含多类型的字典,例如下图:
客户要求取到所有根部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 动手练:字典
- 01-08将 Excel 表格中每三行合并到一个单元格中,用“、”隔开
- 01-08使用办公软件按表格中从上往下合并成1个TXT文档并添加分隔符号
- 01-08新歌尝鲜 3《分割线》
- 01-08怎么分割视频?这几种分割方法非常简单
- 01-08视频怎么分割?教你简单的三种方法
- 01-08分隔:整理大脑的 5 种方法
- 01-08「深度」凯文-杜兰特的九年雷霆光阴
- 01-08深度丨涅磐重生到“超级3D”球星?他还是无所不能的保罗·乔治
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)