📅  最后修改于: 2023-12-03 15:04:12.569000             🧑  作者: Mango
在Python中,访问嵌套字典或者嵌套列表变量的方式是通过使用多个[ ]
号来访问每个嵌套层次。我们可以使用递归函数来访问多层嵌套字典的数据,但这种方法不够直观和高效。一个更好的方法是将多层嵌套的键扁平化,这样我们就可以使用一个单独的键访问任何嵌套层次的变量。
我们可以使用一个递归函数来实现扁平化嵌套键。这个函数接受一个字典作为参数,其中包含多层嵌套的键值对。函数遍历所有键值对,如果遇到嵌套的字典,就递归地调用函数来处理嵌套的字典。对于每个扁平化的键值对,我们将键名添加到一个列表中,并将与该键名对应的值附加到另一个列表中。最后,我们将这两个列表打包成一个元组列表并返回。
这里是实现代码的示例:
def flatten_dict(dict_obj, parent_key='', sep='_'):
items = []
for k, v in dict_obj.items():
new_key = parent_key + sep + k if parent_key else k
if isinstance(v, dict):
items.extend(flatten_dict(v, new_key, sep=sep).items())
else:
items.append((new_key, v))
return dict(items)
我们可以使用下面的字典作为示例数据:
data = {
"name": "John",
"age": 30,
"address": {
"street": "123 Main St.",
"city": "Anytown",
"state": "CA",
"zipcode": "12345"
},
"phones": [
{
"type": "home",
"number": "555-1234"
},
{
"type": "work",
"number": "555-5678"
}
]
}
现在,我们可以调用flatten_dict
函数来扁平化嵌套的键:
result = flatten_dict(data)
print(result)
输出结果将是:
{
"name": "John",
"age": 30,
"address_street": "123 Main St.",
"address_city": "Anytown",
"address_state": "CA",
"address_zipcode": "12345",
"phones_0_type": "home",
"phones_0_number": "555-1234",
"phones_1_type": "work",
"phones_1_number": "555-5678"
}
扁平化嵌套键是一个非常有用的技巧,它可以为我们节省大量的时间和精力,使代码更容易理解和维护。使用递归函数可以轻松地实现扁平化嵌套键,并且可以适用于任何深度嵌套的字典或者列表。这是一个很实用的技巧,值得我们掌握。