假设我有这样的词典列表
dlist = [d1, d2, d3, d4]
现在d1 inturn是词典的词典,如
d1 = {'dd1':{'a':2. 'ddd1':'moredict'}}
并且里面可以有更多的词典
是否有单行功能可以将所有这些词典转换为聋人。
我希望如果在任何子dict中不存在某些key
,那么它就不会出现关键错误。
编辑:
#something like this , but i was looking for something buildin
def convert_dict(dictionary):
for key, value in dictionary.iteritems():
if isinstance(value, dict):
dictionary[key] = defaultdict(list, value)
convert_dict(value)
答案 0 :(得分:2)
我希望如果某个儿童词典中没有某个键,那么它就不会存在 得到关键错误。
设置默认值是一个选项,或者只使用get
:
>>> d = {'key': 1}
>>> d['foo']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'foo'
>>> d.get('foo')
如果密钥不存在, get
将返回None
,而不是提升KeyError
。您可以通过传递它来返回除None之外的默认值:
>>> d.get('foo',{})
{}
答案 1 :(得分:0)
正如dbaupp已经说过的那样,编写递归函数会不会更好?因为你的词典可以嵌套,所以我不认为有一种“漂亮”的方式可以处理它。
def dict_to_ddict(d, defaultfunction):
'''Convert (nested) dict to defaultdict'''
ddict = defaultdict(defaultfunction)
for k, v in d.iteritems():
if isinstance(v, dict):
ddict[k] = dict_to_ddict(v, defaultfunction)
else:
ddict[k] = v
return ddict
你可以使它更紧凑,但这不会使它更容易阅读。