动态散列dict的Pythonic方法?

2024-10-04 11:33:46 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我创建了这样一个dict:

foods = {}

我最终想改变食物中嵌套dict的一些值,而这些食物目前还不存在:

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')

我想我正在寻找一种方法来动态地散列到嵌套的dict中,而不必沿途显式地实例化它们


Tags: 方法inif过程not动态dict食物
2条回答

您的代码:

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')

使用^{}

我喜欢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']

相关问题 更多 >