在下面的字典中,我希望能够从value
属性中提取subkey*
。但是,如果subkey*
不存在,我想自动返回父value
。
d = {
'key1' : {
'value': "parent-key1",
'subkey1': {
'value': "child1"
},
'subkey2': {
'value': "child2"
}
},
'key2': {
'value': "parent-key2",
'subkey1': {
'value': "child3"
},
'subkey2': {
'value': "child4"
}
}
}
我的函数存根看起来像这样:
def get_values(my_dict_value):
try:
return my_dict_value
except KeyError:
# How do I find the parent value of my_dict_value?
我的预期结果是:
>>> get_values(d['key1']['subkey1']['value'])
child1
>>> get_values(d['key1']['subkey3']['value'])
parent-key1
如何在字典中找到父值?
答案 0 :(得分:1)
以下是使用get
方法解决嵌套字典的另一种方法:
>>>
>>> d = {
... 'key1' : {
... 'value': "parent-key1",
... 'subkey1': {
... 'value': "child1"
... },
... 'subkey2': {
... 'value': "child2"
... }
... },
... 'key2': {
... 'value': "parent-key2",
... 'subkey1': {
... 'value': "child3"
... },
... 'subkey2': {
... 'value': "child4"
... }
... }}
>>>
>>> def get_value(key, subkey):
... dkey = d.get(key)
... return dkey.get(subkey, {}).get('value', dkey.get('value'))
...
>>> print get_value("key1", "subkey1")
child1
>>> print get_value("key2", "subkey2")
child4
>>> print get_value("key2", "subkey3")
parent-key2
>>>
答案 1 :(得分:0)
作为SethMMorton mentions,您的当前方法将在它到达函数之前抛出一个键错误。
您可以通过将两个值传递给您的函数来解决此问题 - parent
和child
。因为你的例子显示两者都使用了value
的密钥,所以我放弃了需要传递的第三个。该功能可以自动处理。
def get_values(key, subkey):
try:
return d[key][subkey]['value']
except KeyError:
try:
return d[key]['value']
except KeyError:
return "Not found"
这利用了嵌套异常,如果你比那些更深入,它会变得非常混乱。但是,外try
块会尝试返回您的parent
/ child
/ value
。如果不存在,则会尝试返回parent
/ value
。如果不存在,则返回Not found
您可以这样称呼它:
print get_values("key1", "subkey1")
print get_values("key1", "subkey3")
print get_values("key4", "subkey1")
输出:
child1
parent-key1
Not found