You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python带条件的字典推导式扁平化嵌套字典?

用字典推导式扁平化字典结构

当然可以仅用字典推导式实现这个需求,写法比循环更简洁。

正确的字典推导式实现

假设你的data字典每个子项都包含data键,可以这样写:

mydict = {
    id: {**values['data'], **{k: v for k, v in values.items() if k != 'data'}}
    for id, values in data.items()
}

如果担心部分子项没有data键(避免KeyError),可以用get方法做兼容:

mydict = {
    id: {**values.get('data', {}), **{k: v for k, v in values.items() if k != 'data'}}
    for id, values in data.items()
}

代码解释

  • {k: v for k, v in values.items() if k != 'data'}:先提取当前子项中除data外的所有键值对,生成一个临时字典
  • **values['data']:用字典解包语法,把data子字典里的所有键值对展开到新字典中
  • 两者通过**合并后,就得到了你想要的扁平化结构,最后外层推导式遍历所有id,生成最终的字典

你原来推导式的问题

你之前的写法逻辑有误:

  1. 试图在嵌套循环中逐个生成单键值对的小字典,但字典推导式的结构要求每个id对应一个完整的字典,这样拆分生成会导致同一个id的后续字典覆盖前面的结果
  2. 语法结构不符合字典推导式的规范,嵌套循环的位置和内部逻辑的拆分不正确

内容的提问来源于stack exchange,提问作者bhdrozgn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 18:10:36