0

假设我有这样的字典列表

dlist = [d1, d2, d3, d4] 现在 d1 反过来是字典的字典,例如

d1 = {'dd1':{'a':2. 'ddd1':'moredict'}}

里面可以有更多的字典

是否有单行功能可以将所有这些字典转换为默认字典。

我希望如果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)
4

2 回答 2

2

我希望如果任何子字典中都不存在某个键,那么它不会出现键错误。

设置默认值是一种选择,或者简单地使用get

>>> d = {'key': 1}
>>> d['foo']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'foo'
>>> d.get('foo')

getNone如果键不存在,将返回,而不是 raise KeyError。你可以让它返回一个默认值而不是None,通过传入它:

>>> d.get('foo',{})
{}
于 2013-05-06T08:21:11.597 回答
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

您可以使它更紧凑,但这并不使其更易于阅读。

于 2013-05-06T08:31:16.487 回答