Pythonic方式动态地通过词典的dict?

时间:2015-08-11 18:09:37

标签: python dictionary

假设我像这样创建一个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中,而不是在整个过程中明确地实例化它们。

2 个答案:

答案 0 :(得分:4)

我喜欢Python标准库。您想使用collections.defaultdict。 在这种情况下,您希望嵌套它们,以便foodsdefaultdict,在请求的项目不存在的情况下,生成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')

使用setdefault(key[, default])