嵌套字典,Python中的返回特定键

时间:2016-03-22 08:27:14

标签: python dictionary nested extract

我有一个JSON对象:

zt123

zt3653

zt777 ..等。

我尝试了以下但是认为我过于复杂了。有简化的方法吗?

def extract(dict_in, dict_out):
    for key, value in dict_in.iteritems():
        if isinstance(value, dict): # If value itself is dictionary
            extract(value, dict_out)
        elif isinstance(value, unicode):
            # Write to dict_out
            dict_out[key] = value
    return dict_out

3 个答案:

答案 0 :(得分:0)

此StackOverFlow问题的所选答案可能对您有用: JUnit api

答案 1 :(得分:0)

  

这些将始终嵌套在 - >接口 - >接口 - > zt

如果它处于固定位置,只需调用此位置:

hosts1_xxxxxxx= {
    "line": {}, 
    "interfaces": {
        "interface": {
            "zt123": {},
            "zt456": {},
        },
    },
}
zts = list(hosts1_xxxxxxx["interfaces"]["interace"].keys())
print(zts)
# ["zt123", "zt456"]

答案 2 :(得分:0)

这是执行此操作的一般方法(对于字典中的任何深度) -

# This function takes the dict and required prefix
def extract(d, prefix, res=None):
    if not res:
        res = []
    for key, val in d.iteritems():
        if key.startswith(prefix):
            res.append(key)
        if type(val) == dict:
            res = extract(val, prefix, res[:])
    return res

# Assume this to be a sample dictionary - 
d = {"zt1": "1", "zt2":{"zt3":{"zt4":"2"}}}
res = extract(d, "zt")
print res

# Outputs- 
['zt1', 'zt2', 'zt3', 'zt4']

这基本上迭代了每一个键,并使用startswith函数来确定密钥是否以zt开头