如何正确使用itemgetter获取嵌套字典的键值?
使用itemgetter获取嵌套字典值的正确方式
你的代码报错是因为itemgetter("name", "en")的作用是从同一个字典层级中同时获取"name"和"en"两个键对应的值,而顶层字典里并没有"en"这个键,所以抛出KeyError。
要实现嵌套字典的取值,需要嵌套使用itemgetter,先获取子字典,再从子字典中取值:
方法一:分步调用itemgetter
from operator import itemgetter dct = {"name": {"en": "John"}} # 先获取name对应的子字典 get_name_dict = itemgetter("name") # 再从子字典中获取en的值 get_en_value = itemgetter("en") result = get_en_value(get_name_dict(dct)) print(result) # 输出: John
方法二:合并为一个lambda表达式
如果想写成一行,可以用lambda把两个itemgetter的调用组合起来:
from operator import itemgetter dct = {"name": {"en": "John"}} getter = lambda d: itemgetter("en")(itemgetter("name")(d)) print(getter(dct)) # 输出: John
补充:支持任意深度嵌套的复用逻辑
如果需要多次处理不同深度的嵌套取值,可以封装成工具函数:
from operator import itemgetter from functools import reduce def nested_itemgetter(*keys): return lambda d: reduce(lambda obj, key: itemgetter(key)(obj), keys, d) # 使用示例 dct = {"name": {"en": "John"}} getter = nested_itemgetter("name", "en") print(getter(dct)) # 输出: John
内容的提问来源于stack exchange,提问作者Альберт Александров
相关产品推荐
相关产品推荐

