如何在Python中使用字典列表中的所有字典

时间:2013-05-06 07:53:48

标签: python dictionary

假设我有这样的词典列表

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)

2 个答案:

答案 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

你可以使它更紧凑,但这不会使它更容易阅读。

相关问题