如何在 Python 中有效地重新组织 dict?
How to efficiently re-organise dict in Python?
objective 是将两个级别 dict
重新组织在一个级别中。
假设二级 dict
给出如下:
first_level_one = dict(my='my', ex='ex', second_level=dict(sec_one='sec_one', sec_two='omy'))
first_level_two = dict(my='my', ex='ex', second_level=dict(sec_one='sec_one', sec_two='omy'))
combine = [first_level_one, first_level_two]
预期的输出应该是:
combine_trim=[dict(my='my', ex='ex', sec_one='sec_one', sec_two='omy'),\
dict(my='my', ex='ex', sec_one='sec_one', sec_two='omy')]
基于上述需求,起草了如下代码
first_level_one = dict(my='my', ex='ex', second_level=dict(sec_one='sec_one', sec_two='omy'))
first_level_two = dict(my='my', ex='ex', second_level=dict(sec_one='sec_one', sec_two='omy'))
combine = [first_level_one, first_level_two]
combine_trim=[]
for my_dic in combine:
xx=my_dic['second_level']
my_dic['sec_one']=xx['sec_one']
my_dic['sec_two'] = xx['sec_two']
del my_dic['second_level']
combine_trim.append(my_dic)
有两个问题;
- 与上面建议的代码相比,这是更有效的方法。这是因为,secondary level的key比较多,实际情况下。
- 与引入主要用于
append
程序的 combine_trim
相比,是否有可能只有 combine
变量?
试试这个,使用 isinstance
检查值是否为 dict
& 使用 update
添加到创建的 tmp 字典。
combine_trim=[]
for my_dic in [first_level_one, first_level_two]:
tmp = {}
for k, v in my_dic.items():
if isinstance(v, dict):
tmp.update(v)
else:
tmp[k] = v
combine_trim.append(tmp)
objective 是将两个级别 dict
重新组织在一个级别中。
假设二级 dict
给出如下:
first_level_one = dict(my='my', ex='ex', second_level=dict(sec_one='sec_one', sec_two='omy'))
first_level_two = dict(my='my', ex='ex', second_level=dict(sec_one='sec_one', sec_two='omy'))
combine = [first_level_one, first_level_two]
预期的输出应该是:
combine_trim=[dict(my='my', ex='ex', sec_one='sec_one', sec_two='omy'),\
dict(my='my', ex='ex', sec_one='sec_one', sec_two='omy')]
基于上述需求,起草了如下代码
first_level_one = dict(my='my', ex='ex', second_level=dict(sec_one='sec_one', sec_two='omy'))
first_level_two = dict(my='my', ex='ex', second_level=dict(sec_one='sec_one', sec_two='omy'))
combine = [first_level_one, first_level_two]
combine_trim=[]
for my_dic in combine:
xx=my_dic['second_level']
my_dic['sec_one']=xx['sec_one']
my_dic['sec_two'] = xx['sec_two']
del my_dic['second_level']
combine_trim.append(my_dic)
有两个问题;
- 与上面建议的代码相比,这是更有效的方法。这是因为,secondary level的key比较多,实际情况下。
- 与引入主要用于
append
程序的combine_trim
相比,是否有可能只有combine
变量?
试试这个,使用 isinstance
检查值是否为 dict
& 使用 update
添加到创建的 tmp 字典。
combine_trim=[]
for my_dic in [first_level_one, first_level_two]:
tmp = {}
for k, v in my_dic.items():
if isinstance(v, dict):
tmp.update(v)
else:
tmp[k] = v
combine_trim.append(tmp)