使用通配符键元素访问Python字典

3

给定以下字典(片段),其结构将始终相同,但关键名称“'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
@ssm:servers的值是一个列表,而不是一个字典。 - mhawke
我的错!对于格式有点混淆了。我猜在for循环之后应该是json[server]['assresses'].values()然后.... - ssm
1个回答

1
在这个非常牵强的例子中,选择地址0只会发生一次:
>>> addr0 = json['servers'][0]['addresses'].values()[0][0]['addr']
>>> addr0
'10.2.198.244'

更一般地说,很难说。
关键词private会改变什么?它可能会变成public吗?看起来可能存在其他类型的地址(例如公共地址)在addresses字典中。您不能假设字典中键的特定顺序,这意味着您不能依赖于dict.values()返回私有地址在列表索引0上。没有可靠的键是不可预测的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接