假设我像这样创建一个dict:
foods = {}
我最终想要在一些尚未存在的食物中改变嵌套词典的某些价值:
foods['fruit']['apples'] = ['Granny Smith']
有没有一种很好的方法来完成这个插入而不检查整个方式:
if 'fruit' not in foods:
foods['fruit'] = {}
if 'apples' not in foods['fruit']:
foods['fruit']['apples'] = []
foods['fruit']['apples'].append('Granny Smith')
我想我正在寻找一种方法来动态散列到嵌套的dicts中,而不是在整个过程中明确地实例化它们。
答案 0 :(得分:4)
我喜欢Python标准库。您想使用collections.defaultdict。
在这种情况下,您希望嵌套它们,以便foods
是defaultdict
,在请求的项目不存在的情况下,生成defaultdict
,在请求的项目不存在的情况下生成>>> from collections import defaultdict
>>> foods = defaultdict(lambda: defaultdict(list))
>>> foods['fruit']['apples'].append('Granny Smith')
>>> print(foods['fruit']['apples'])
['Granny Smith']
一个列表。听起来很复杂,但最终结果却不是:
tomorrow
in a year
last week
in 8 hours
in 4 months
8 8 90
65
答案 1 :(得分:3)
您的代码:
if 'fruit' not in foods:
foods['fruit'] = {}
if 'apples' not in foods['fruit']:
foods['fruit']['apples'] = []
foods['fruit']['apples'].append('Granny Smith')
将写成:
foods.setdefault('fruit', {}).setdefault('apples', []).append('Granny Smith')