Python 符合pep8的深层字典访问
什么是pep8兼容的深度字典访问方式Python 符合pep8的深层字典访问,python,pep8,Python,Pep8,什么是pep8兼容的深度字典访问方式 dct = { 'long_key_name_one': { 'long_key_name_two': { 'long_key_name_three': { 'long_key_name_four': { 'long_key_name_five': 1 } } }
dct = {
'long_key_name_one': {
'long_key_name_two': {
'long_key_name_three': {
'long_key_name_four': {
'long_key_name_five': 1
}
}
}
}
}
E501行太长(118>80个字符)
E211“[”之前的空格
print dct['long_key_name_one']['long_key_name_two']\
['long_key_name_three']['long_key_name_four']['long_key_name_five']
E124闭合支架与目视压痕不匹配
print dct['long_key_name_one']['long_key_name_two'
]['long_key_name_three']['long_key_name_four']['long_key_name_five']
这通过了pep8,但似乎不太理想
print dct['long_key_name_one']['long_key_name_two'][
'long_key_name_three'
]['long_key_name_four']['long_key_name_five']
有没有一种方法可以将生产线拆分,使其看起来美观且符合pep8标准?也许不是最好的方法,但它可以工作:
a = dct['long_key_name_one']['long_key_name_two']
b = a['long_key_name_three']['long_key_name_four']['long_key_name_five']
但这也是可行的,这是建议的方法:
print (dct['long_key_name_one']['long_key_name_two']
['long_key_name_three']['long_key_name_four']
['long_key_name_five'])
如果您在函数中使用它(从2.7 afaik开始,您可以将print()用作函数) 可以在括号内使用隐式连接
print(dct['long_key_name_one']
['long_key_name_two']
['long_key_name_three']
['long_key_name_four']
['long_key_name_five'])
我认为第一种方法是最好的选择。除此之外,最好的选择是更好地设计您的数据结构,这样您就不会在一开始就遇到这种情况。没有太多情况下,您有一个5层深的对象树,其中没有任何中间层本身是有用的,如果您有这样的情况,那么您就是p使用树迭代器或DOM样式搜索可能比使用这种访问更好。如果需要设置值,第一种方法对您没有帮助。@tponthieux:当然有。
a
只是dct
中内部字典的名称a[k]=v
相当于dct['long\u key\u name\u one']['long\u key\u name\u two']=v
在这种情况下。啊,你是对的:id(dct['long\u key\u name\u one']['long\u key\u name\u two'])==id(a)
如果键已经在列表中,并且你知道该值存在,那么你可以:value=reduce(dict.get,keys,dct)
。
print(dct['long_key_name_one']
['long_key_name_two']
['long_key_name_three']
['long_key_name_four']
['long_key_name_five'])