通过访问深层嵌套的字典打破很长的界限
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 的隐含的括号内的行继续。
我访问了一个嵌套很深的字典,想正确地断开很长的行。让我们假设我有这个并且想要打破这条线以符合 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 的隐含的括号内的行继续。