可以访问很深的嵌套词典来打破很长的行

时间:2018-07-12 11:04:34

标签: python dictionary pep8

我访问了一个嵌套很深的字典,想正确地断开很长的行。假设我有这个,并且想换行以符合PEP8。 (实际的行当然会更长,这只是一个例子。)

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

假设整体

,您如何打破界限
some_dict['foo']['bar']['baz']

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

更新:请注意,我要分配该字典。拟议的副本仅涉及从这种字典中获取价值。

2 个答案:

答案 0 :(得分:3)

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

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

等于

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

您可以在任意位置断开它,就像这样:

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

应使用Python preferred的方式来打破长行,使用括号内的Python隐含行连续符。

答案 1 :(得分:0)

如果要处理深层嵌套的字典,则应考虑其他数据结构,使用元组键进行重构或通过列表定义路径。

以下是最后一个选项的示例,该选项特别有助于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']