我访问了一个嵌套很深的字典,想正确地断开很长的行。假设我有这个,并且想换行以符合PEP8。 (实际的行当然会更长,这只是一个例子。)
some_dict['foo']['bar']['baz'] = 1
假设整体
,您如何打破界限some_dict['foo']['bar']['baz']
不再适合一行吗?有很多打破长行的例子,但是我找不到这个基于字典访问的问题。
更新:请注意,我要分配该字典。拟议的副本仅涉及从这种字典中获取价值。
答案 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']