我有一个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
答案 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
开头