Python:从嵌套字典中访问元素,就像SQL一样



一个简单的问题 - 但我还没有找到它的语法答案。如何选择具有特定键值组合的子词典?实际上,我怎么select * where id='ABC'

详:

我在 Python 中并创建了一个嵌套字典。我需要从子字典中提取信息,其中子字典的键值之一是 blah。

我已经初始化了字典,

我可以读取它的元素,但我不明白如何通过键值对调用每个子字典。举个例子,

#json_data is a json object
data={}
for i in range(10):
   data[i]={'id':json_data[i]['id'],
      'stationName':json_data[i]['stationName'], 
      'numBikes':json_data[i]['numBikes']}

这让我的嵌套词典开始了。我可以data[0]访问数据,它将正确打印出我的子字典。但是由于这些索引没有任何意义,因为我可以添加/删除行,我需要通过键值访问它。

但是,当 id 等于"ABC"时,如何调出站名和自行车数量?

既然,正如你所说,索引没有任何意义,为什么不使用你的 id 值作为键呢?

data={}
for i in range(10):
    data[json_data[i]['id']] = {
        'stationName': json_data[i]['stationName']
        'numBikes': json_data[i]['numBikes']
    }

或者,因为我们是python:

data = {}
for id, value in json_data.items():
    data[id] = {
        'stationName': value['stationName']
        'numBikes': value['numBikes']
    }

在您的示例中,您只有一个字典数组。还有更深入的吗?如果没有,那么它可以像以下那样简单:

[data[i] for i in data if data[i]['id']=='ABC']

您可以使用标准的python语法从字典中提取数据。它可能会导致一些额外的代码,但这是可以做到的。

但是,如果您需要更花哨的东西,或者您有太多嵌套字典以至于迭代和循环很麻烦,您可以尝试 dpath-python,它为您提供了一种xpath的接口来查询嵌套字典。对于SQL类型的语法,我不确定。

从文档 -

一个python库,用于通过以下方式访问和搜索字典 /slashed/path ala xpath

基本上,它可以让您浏览字典,就好像它是一本字典一样。 文件系统。它允许您指定 glob(ala bash eglob 语法, 通过一些高级的fnmatch.fnmatch魔术(访问字典 元素,并提供了一些用于筛选这些结果的工具。

相关内容

最新更新