我有一个dict
,如下:
{'data': 'v1', 'data2': {'xyz': 'ABC' }}
我想要一个dict
,例如:
{'data': 'v1', 'data2': 'ABC'}
基本上我想使用'data2'
的键值分配给'data2'
。
这是一个具有多个级别的深度嵌套的递归字典。
您可以使用一个函数取消嵌套dict
的特定键对。但是,此示例仅在嵌套dict
具有要升级的单个键的情况下才有效。
def unnest(root_dict, **key_map):
"""
root_dict: This is the dict object to work with.
**key_map: These are the key="nested_key" pairs to promote.
"""
obj = root_dict.copy()
for key, nested_key in key_map.items():
obj[key] = obj[key][nested_key]
return obj
将此功能与示例输入一起使用:
>>> example_dict = {'data': 'v1', 'data2': {'xyz': 'ABC' }}
>>> unnest(example_dict, data2="xyz")
{'data': 'v1', 'data2': 'ABC'}
这是执行此操作的纯Python方法:
newdict={}
for k,v in data.items():
if type(v) == str:
newdict[k] = v
else:
newdict[k] = list(v.values())[0]
# {'data': 'v1', 'data2': 'ABC'}
您还可以转换为熊猫数据框,并提取所需的信息。这是两个示例:
import pandas as pd
q= pd.DataFrame({'data': 'v1', 'data2': 'ABC'}, index=[0])
w=pd.DataFrame({'data': 'v1', 'data2': {'xyz': 'ABC' }})
q.merge(w).to_dict(orient='records'
)
# [{'data': 'v1', 'data2': 'ABC'}]
或
w.to_dict(orient='records')
# [{'data': 'v1', 'data2': 'ABC'}]