Skip to main content
 首页 » 编程设计

python之解压嵌套字典的更简洁方法

2025年05月04日15xiaohuochai

我正在从 API 以 JSON 格式批量接收数据。我希望仅将值存储在列表中。

原始数据看起来像这样并且将始终像这样,即:所有 {...} 都像第一个示例:

data = content.get('data') 
>>> [{'a':1, 'b':{'c':2, 'd':3}, 'e':4}, {...}, {...}, ...] 

嵌套字典使这变得更难;我也需要打开包装。

这是我拥有的,它有效但感觉很糟糕:

unpacked = [] 
data = content.get('data') 
for d in data: 
    item = [] 
    for k, v in d.items(): 
        if k == 'b': 
            for val in v.values(): 
                item.append(val) 
        else: 
            item.append(v) 
    unpacked.append(item) 

输出:

>>> [[1,2,3,4], [...], [...], ...] 

我该如何改进?

请您参考如下方法:

您可以使用递归函数和一些类型测试:

data = [{'a':1, 'b':{'c':2, 'd':3}, 'e':4}, {'f':5,'g':6}] 
 
def extract_nested_values(it): 
    if isinstance(it, list): 
        for sub_it in it: 
            yield from extract_nested_values(sub_it) 
    elif isinstance(it, dict): 
        for value in it.values(): 
            yield from extract_nested_values(value) 
    else: 
        yield it 
 
print(list(extract_nested_values(data))) 
# [1, 2, 3, 4, 5, 6] 

请注意,它输出的是平面生成器,而不是列表的列表。