如何用glom从嵌套结构中提取二级键'B2'的所有对应值?
解决嵌套字典提取二级键值的glom问题
嘿,我来帮你搞定这个提取嵌套字典值的问题!你想要从这个两层嵌套字典里快速拿出所有二级结构中B2对应的 value,其实用glom有个很直接的写法,先给你看正确的代码:
from glom import glom target = {'A1': {'B1': 'a1b1', 'B2': 'a1b2'}, 'A2': {'B1': 'a2b1', 'B2': 'a2b2'}} # 正确的glom写法 result = glom(target, ['*', 'B2']) print(result) # 输出: ['a1b2', 'a2b2']
为什么你之前的写法不行?
- 对于
glom(target, T[:, 'B2']):T在glom里是用来转置结构的,不是像numpy那样做索引,这种数组式的写法不适用于字典的嵌套结构,所以会出错。 - 对于
Path(Path(), Path('B2')):Path是用来指定单一嵌套路径的(比如提取A1下的B2用Path('A1', 'B2')),但它不会自动遍历所有顶层键,所以没法批量提取所有子字典里的B2。
额外的备选方案(不用glom)
如果不想依赖第三方库,用Python原生的列表推导式就能轻松搞定,代码更简洁:
result = [sub_dict['B2'] for sub_dict in target.values()]
这个写法直接遍历顶层字典的所有值(也就是每个子字典),然后取出每个子字典里B2对应的value,结果和用glom是完全一样的。
内容的提问来源于stack exchange,提问作者Ruggero Turra
相关产品推荐
相关产品推荐

