Python代码阅读

Python代码阅读(第81篇):根据选择器获取嵌套字典的键值

2021-11-24  本文已影响0人  FelixZzzz

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来获取对应的子字典(或最终值)。

上一篇下一篇

猜你喜欢

热点阅读