【问题标题】:Python: Accessing elements from nested dictionaries a la SQLPython:使用 SQL 访问嵌套字典中的元素
【发布时间】:2013-06-21 04:21:06
【问题描述】:

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

【问题讨论】:

  • 为什么要创建一个嵌套字典?它的键只是数值。我会改为将这些字典添加到列表中。
  • 这和 PostgreSQL 有什么关系?取消标记。

标签: python dictionary


【解决方案1】:

正如你所说,索引没有任何意义,为什么不使用你的 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']
    }

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      来自文档 -

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

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

      【讨论】:

        猜你喜欢
        • 2021-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-25
        • 2020-10-25
        • 1970-01-01
        • 2021-12-19
        • 2018-02-09
        相关资源
        最近更新 更多