当前位置: 首页 > 图灵资讯 > 行业资讯> 使用yield压平嵌套字典有多简单?

使用yield压平嵌套字典有多简单?

发布时间:2025-04-06 15:45:20

我们经常遇到各种字典套字典的数据,比如:

nest_dict={
'a':1,
'b':{
'c':2,
'd':3,
'e':{'f':4}
},
'g':{'h':5},
'i':6,
'j':{'k':{'l':{'m':8}}}
}

有没有简单的方法把它压扁,变成:

{
'a':1,
'b_c':2,
'b_d':3,
'b_e_f':4,
'g_h':5,
'i':6,
'j_k_l_m':8
}

Python视频教程推荐学习

你一定想过用递归来解决这个问题,所以你可以试试,看看你的递归函数有多少行代码。

今天,我们使用yield关键字来满足这一需求。我们只需要8行代码,而不需要炫耀我们的技能。在炫耀技能的情况下,只需要3行代码。

为了快速压扁这个嵌套字典,我们需要从下网处理字段。例如,B->e->f->在这条路径上,我们首先把{'放在最里面;f': 4}转换为一个元组(');f', 4)。然后,向上抛出元组,得到元组('e', ('f', 4)。我们把 e拼接到f的前面,变成:('e_f', 4)继续向上抛出,得到('b', ('e_f', 4)。然后将b拼接到e_f上,得到('b_e_f', 4)。组装一条线路。

如果用yield关键词来实现这个逻辑,那就是:

defflat(x):
forkey,valueinx.items():
ifisinstance(value,dict):
fork,vinflat(value):
k=f'{key}_{k}'
yield(k,v)
else:
yield(key,value)

运行结果如下图所示

通过使用 yield关键词,字典的key就像在流水线上,从内到外逐层组装,从而形成完整的路径。

相关文章

如何让vim支持python3

如何让vim支持python3

2025-09-12
python2.7和3.6区别有哪些

python2.7和3.6区别有哪些

2025-09-12
python3有serial库吗

python3有serial库吗

2025-09-12
python中w、r表示什么意思

python中w、r表示什么意思

2025-09-12
python中如何把list变成字符串

python中如何把list变成字符串

2025-09-12
python命名空间是什么

python命名空间是什么

2025-09-12