用子词典中的一个替换父键值?

问题描述 投票:0回答:2

我有一个dict,如下:

{'data': 'v1', 'data2': {'xyz': 'ABC' }}

我想要一个dict,例如:

{'data': 'v1', 'data2': 'ABC'}

基本上我想使用'data2'的键值分配给'data2'

这是一个具有多个级别的深度嵌套的递归字典。

python
2个回答
0
投票

您可以使用一个函数取消嵌套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'}

0
投票

这是执行此操作的纯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'}]
© www.soinside.com 2019 - 2024. All rights reserved.