如何在访问嵌套字典时格式化python?

时间:2017-01-16 23:35:04

标签: python dictionary

即我有一行这样的代码:

mydict['description_long'] = another_dict['key1'][0]['a_really_long_key']['another_long_key']['another_long_key3']['another_long_key4']['another_long_key5']

如何对其进行格式化以使其符合PEP8指南?

3 个答案:

答案 0 :(得分:5)

这里PEP8风格指南的唯一相关部分是线长。只需将double sqrt( double x )密钥分解为各自独立的行。这使得代码更容易阅读。

dict

答案 1 :(得分:1)

每个[都是一个括号。所以它名义上就像嵌套括号:

mydict['description_long'] = another_dict['key1'][0][
    'a_really_long_key']['another_long_key'][
        'another_long_key3']['another_long_key4'][
            'another_long_key4']

更通用的方法可能是进行一些元编程并使用一系列列表推导或迭代来扩展子数据结构。例如,可以通过遵循列表所代表的路径来找到您的子节点:

keypath = ['key1', 0, 'a_really_long_key', 'another_long_key', 
           'another_long_key3','another_long_key4',
           'another_long_key4']

所以你可以通过以下方式引用你的最终节点:

def resolve_child(root, path):
    for e in path:
        child = root[e]
        root = child
    return child

mydict['description_long'] = resolve_path(another_dict, keypath)

或者如果你想要全部运作(注意{Py}中reduce()被移动到functools):

mydict['description_long'] = reduce(lambda p,c: p[c], keypath, another_dict)

通常很少需要明确引用这样的深层嵌套结构;通常结构是由某些函数实例化的,比如json.parse或lxml.objectify

答案 2 :(得分:0)

我想我会做这样的事情,添加一些内容来覆盖多行:

mydict['description_long'] = (
    another_dict['key1'][0]['a_really_long_key']['another_long_key']
    ['another_long_key3']['another_long_key4']['another_long_key5'])

虽然最好不要首先拥有如此深层的结构,或者将查询分成几个,如果你能给出这些好名字:

item = another_dict['key1'][0]['a_really_long_key']
part_name = item['another_long_key']['another_long_key3']
detail = part_name['another_long_key4']['another_long_key5']

至少这种方式记录了深层结构。