【问题标题】:Access Python dict with wildcard key element使用通配符键元素访问 Python dict
【发布时间】:2014-09-19 08:27:28
【问题描述】:

给定 dict(下面的片段),结构将始终相同,但键名 'private' 可能会更改名称,我没有独立的方法知道 'private' 部分的值是什么钥匙。

json = simplejson.loads(open('servers.list', 'r').read())
for server in json['servers']:
{
    "servers": [
        {
            "addresses": {
                "private": [
                    {
                        "addr": "10.2.198.244",
                        "version": 4
                    },
                    {
                        "addr": "10.4.189.211",
                        "version": 4
                    }
                ]
            }
        }
    ]
}

如何引用'addr'

一般来说,这会起作用,但它不是用通配符替换'private' 的方法:

addr0 = server.get('addresses').get(‘private')[0].get('addr’)

【问题讨论】:

  • json['servers']['assresses'].values() 应该告诉你这些值吧?
  • @ssm : servers 的值是一个列表,而不是一个字典
  • 我的错!对格式有点困惑。我猜它必须在 for 循环之后是 json[server]['assresses'].values() 然后 ....

标签: python dictionary wildcard


【解决方案1】:

在这个非常人为的例子中一次性选择地址 0:

>>> addr0 = json['servers'][0]['addresses'].values()[0][0]['addr']
>>> addr0
'10.2.198.244'

一般来说很难说。

密钥private 改变了什么?会不会是public?看起来addresses 字典中可能存在其他类型的地址(例如公共地址)。您不能假设字典中键的特定顺序,这意味着您不能依赖 dict.values() 返回列表索引 0 处的私有地址。如果没有可靠的键,这是不可预测的。

【讨论】:

    猜你喜欢
    • 2022-12-06
    • 1970-01-01
    • 2012-01-28
    • 2012-03-08
    • 2020-10-26
    • 1970-01-01
    • 2013-01-21
    • 2014-01-28
    • 2016-08-09
    相关资源
    最近更新 更多