一个简单的问题 - 但我还没有找到它的语法答案。如何选择具有特定键值组合的子词典?实际上,我怎么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魔术(访问字典 元素,并提供了一些用于筛选这些结果的工具。