如何用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,生成最终的字典
你原来推导式的问题
你之前的写法逻辑有误:
- 试图在嵌套循环中逐个生成单键值对的小字典,但字典推导式的结构要求每个id对应一个完整的字典,这样拆分生成会导致同一个id的后续字典覆盖前面的结果
- 语法结构不符合字典推导式的规范,嵌套循环的位置和内部逻辑的拆分不正确
内容的提问来源于stack exchange,提问作者bhdrozgn
相关产品推荐
相关产品推荐

