Python 代码阅读合集介绍:为什么不推荐Python初学者直接看项目源码
本篇阅读的代码根据给定选择器定义的查询结构(路径),获取嵌套字典中对应的键值。
本篇阅读的代码片段来自于30-seconds-of-python。
get
from functools import reduce
from operator import getitem
def get(d, selectors):
return reduce(getitem, selectors, d)
# EXAMPLES
users = {
'freddy': {
'name': {
'first': 'fred',
'last': 'smith'
},
'postIds': [1, 2, 3]
}
}
get(users, ['freddy', 'name', 'last']) # 'smith'
get(users, ['freddy', 'postIds', 1]) # 2
get
函数接收一个字典d
,和一个选择器(列表形式)selectors
,返回由选择器指定的路径的键的值。
函数使用reduce
函数在选择器上逐一使用operator.getitem(a, b)
函数,选择器元素的指示,逐一获取嵌套的子字典结构(或最终值)。
operator
模块提供了一套与Python
的内置运算符对应的高效率函数。例如,operator.add(x, y)
与表达式x+y
相同,operator.getitem(a, b)
则是返回a
上面索引为b
的值。
reduce(getitem, selectors, d)
函数将getitem()
累计的作用于selectors
的元素上,并将d
做为左边参数的初始值参与第一次getitem
的调用。例如reduce(getitem, [a, b, c], d)
是计算getitem(getitem(getitem(d, a), b), c)
。也就是从输入字典开始,不断的根据key
来获取对应的子字典(或最终值)。