通过访问深层嵌套的字典打破很长的界限

Break very long lines with access to deeply nested dictionaries

我访问了一个嵌套很深的字典,想正确地断开很长的行。让我们假设我有这个并且想要打破这条线以符合 PEP8。 (实际的线路当然要长一些,这只是一个例子。)

some_dict['foo']['bar']['baz'] = 1

你会如何打破这条线,假设整个

some_dict['foo']['bar']['baz']

不再适合一行?有很多关于打断长行的例子,但我找不到这个基于字典访问的问题。

更新:请注意,我想分配一些东西给那个字典。建议的副本只讨论从那种字典中获取值。

如果你正在处理深度嵌套的字典,你应该考虑另一种数据结构,用元组键重构,或者通过列表定义你的路径。

这是最后一个选项的示例,它特别有助于 PEP8:

from operator import getitem
from functools import reduce

def get_val(dataDict, mapList):
    return reduce(getitem, mapList, dataDict)

d = {'foo': {'bar': {}}}

*path, key = ['foo', 'bar', 'baz']

get_val(d, path)[key] = 1

请注意,列表不需要元素之间的换行符。这很好:

*path, key = ['foo',
              'bar',
              'baz']

这是我最满意的解决方案。归结为:

some_dict['foo']['bar']['baz'] = 1

等于

(some_dict['foo']['bar']['baz']) = 1

你可以在任何地方打破它,就像这样:

(some_dict['foo']
          ['bar']['baz']) = 1

这应该与 Pythons preferred 断长行的方式一致,使用 Python 的隐含的括号内的行继续。