0

一个简单的问题 - 但我还没有找到它的语法答案。如何选择具有特定键值组合的子词典?有效地,我如何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”时,如何调出车站名称和自行车数量?

4

3 回答 3

0

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

[data[i] for i in data if data[i]['id']=='ABC']
于 2013-06-21T04:35:33.950 回答
0

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

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

从文档 -

用于通过 /slashed/paths ala xpath 访问和搜索字典的 python 库

基本上它可以让你在字典上查找,就好像它是一个文件系统一样。它允许您指定 glob(也就是 bash eglob 语法,通过一些高级 fnmatch.fnmatch 魔术)来访问字典元素,并提供一些工具来过滤这些结果。

于 2013-06-21T04:29:16.380 回答
0

正如您所说,既然索引没有任何意义,为什么不使用您的 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']
    }
于 2013-06-21T04:31:15.627 回答