如何用Python优雅更新多层字典中含指定键的子项?
优雅实现嵌套字典的age值更新
先看你的原始数据:
employee_data = { 'peter': {'age': 28, 'department': 3857}, 'helga': {'department': 57, 'occupancy': 'graphics'}, 'eugene': {'age': 48, 'department': 12, 'role': 'teamlead'} }
方法1:字典推导式生成新字典(不修改原数据)
如果不想改动原字典,用字典推导式一行就能搞定,简洁又清晰:
updated_data = { name: {'age': 30, **details} if 'age' in details else details for name, details in employee_data.items() }
这里用**details展开原子字典的所有键值对,再用'age':30覆盖原有age值(如果存在),其他键值对完全保留。
方法2:原地修改原字典(生成器表达式配合遍历)
要是想直接修改原字典,用生成器表达式过滤出包含age的子字典,再批量更新:
for details in (d for d in employee_data.values() if 'age' in d): details['age'] = 30
生成器表达式只会筛选出符合条件的子字典,遍历过程中直接修改,比嵌套循环+判断的写法更紧凑。
方法3:map函数实现(简洁但可读性稍弱)
追求极致简洁的话,也可以用map配合lambda,但可读性不如前两种,仅作参考:
list(map(lambda d: d.update({'age':30}) if 'age' in d else None, employee_data.values()))
需要用list触发迭代执行,因为map返回的是迭代器,不遍历不会生效。
内容的提问来源于stack exchange,提问作者Noob
相关产品推荐
相关产品推荐

