2013-06-21 32 views
0

一个简单的问题 - 但我还没有找到它的语法答案。如何选择具有特定键值组合的子字典?实际上,我如何select * where id='ABC'Python:从嵌套字典a la访问元素SQL

详情:

我在Python和已经创建了一个嵌套的字典。我需要从子字典中提取信息,其中一个子字典的键值是无用的。

我已经获得了字典初始化,我可以读取它的元素,但我不明白如何通过关键值对调用每个子字典。例如,

#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”时,我该如何提取站名和自行车数量?

+0

你为什么创建它一个嵌套字典?它的键只是数字值。我会将这些字典添加到列表中。 –

+0

这与PostgreSQL有什么关系?去标记。 –

回答

0

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

但是如果你需要更多的东西看中的还是你有迭代,并通过繁琐循环这么多的嵌套类型的字典,你可以尝试dpath-python,让你像一个xpath一种接口查询嵌套类型的字典。对于SQL类型的语法我不确定。

从技术文档 -

一个Python库访问,并通过 /扎/路径ALA的XPath

基本上,它可以让你在glob的字典就好像它是一个文件系统 搜索词典。它允许你通过一些先进的fnmatch.fnmatch魔术来指定球体(ala bash eglob语法, )以访问字典 元素,并提供一些过滤这些结果的工具。

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'] 
    } 
0

在你的榜样,你只需要字典的数组。有没有更深的了解?如果不是,那么它可以如此简单:

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