Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 符合pep8的深层字典访问_Python_Pep8 - Fatal编程技术网

Python 符合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 } } }

什么是pep8兼容的深度字典访问方式

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'])