1

选择器,如 jQuery 选择器、CSS 选择器和 XPATH 都很酷。

问题有没有人为表示为嵌套基元(列表、字典、元组等)的 Python 对象写过类似的东西?

(注意:如果此类对象需要是非循环的,对于大多数情况,我不会认为这是一个过于极端的限制。)

简单的例子如果我们有这样的数据,

x = [
  {'xyz': 3},
  {'xyz': 4}
]

sel("[].xyz", x)那么,如果有人能写出类似的东西并返回(也许是对)的引用,那就太好了[3, 4]

第二个简单的例子如果我们有这样的数据,

x = [{'a': {'b': [1, 2]}}]

然后,也许我们可以写一些类似sel("[].a.b[]", x)和 get的东西[1, 2]

4

1 回答 1

2

“jQuery 选择器、CSS 选择器和 XPATH”之所以存在,是因为在其他方面很难查询 DOM、CSS 和 XML。

然而,Python 在提供清晰简洁的重新组织/查询数据结构的方法方面通常非常出色。

您的示例 ,sel("[].xyz", x)会习惯性地写成:

[d['xyz'] for d in x]

它只长了五个字符,并且可以说更清晰。你的第二个例子,sel("[].a.b[]", x),会习惯性地写成

list(itertools.chain(*[d['a']['b'] for d in x]))

尽管更冗长,但不那么模棱两可(在您的示例中,我们如何知道列表需要展平)。

我认为您期望从类似语言的查询中获得的功能完全存在于以下功能集中:

  1. 字典
  2. 列表理解(和字典/集合理解)
  3. 列表切片
  4. itertools模块_
于 2013-04-09T23:04:45.683 回答