【发布时间】:2014-05-25 12:34:12
【问题描述】:
我有以下字典:
my_dict = {'key1': {'key2': {'foo': 'bar'} } }
我想在 key1->key2->key3 中附加一个条目,其值为 'blah' yielding:
my_dict = {'key1': {'key2': {'foo': 'bar', 'key3': 'blah'} } }
我正在寻找一种与键数无关的通用解决方案,即 key1->key2->key3->key4->key5 也应该可以工作,即使 key3 向下的键不存在。所以我得到:
my_dict = {'key1': {'key2': {'foo': 'bar', 'key3': {'key4': {'key5': 'blah'} } } } }
提前致谢。
【问题讨论】:
-
我的回答中的技术也适用于此;使用
reduce()走到最里面的字典(根据需要创建额外的字典)。 -
@MartijnPieters:感谢您的提示。但我认为这只是我问题的前半部分。现在,在创建键之后,我如何在给定键列表和值的情况下访问它?
-
target = reduce(lambda d, k: d.setdefault(k, {}), path[:-1], my_dict)是正确字典的路径(因为path[-1]只是实际值的列表键),然后target[path[-1]] = 'blah'执行最后一步。 -
使用
reduce()遍历对象并设置属性而不是字典和键的类似答案:How to use string formatting to dynamically assign variables
标签: python dictionary