python 样式指南 pep 8。多行多列字典

标签 python coding-style pep8

你好,当我有一个我想使用的多维字典时,我用一些较长名称的变量访问它,我遇到了一些 +80 字符行。我怎样才能根据 pep8 缩短它。

例如:

myvalue = mydict[application_module][chapter][paragraph][line][character][some_other_value]

问题:如何在不重命名变量的情况下将其缩短/多行化?

我知道我能做到:

myvalue = mydict[application_module] \
                [chapter] \
                [paragraph] \
                [line] \
                [some_other_value]

将\用于 muliline 是唯一的解决方案吗?

最佳答案

是的,为了拒绝引发语法错误,您需要转义新行。但作为另一种替代方法,您可以使用递归函数从嵌套字典中获取值:

>>> d = {1: {2: {3: {4: {5: 'a'}}}}}
>>> def get_item(d,*keys):
...    for i,j in enumerate(keys):
...        item = d[j]
...        if isinstance(item, dict):
...           return get_item(item,*keys[i+1:])
...        return item

或者在 next 中使用生成器表达式:

>>> def get_item(d,*keys):
...   return next(get_item(d[j],*keys[i+1:]) if isinstance(d[j],dict) else d[j] for i,j in enumerate(keys))
... 
>>> print get_item(d,1,2,3,4,5)
a

或者作为一种更 pythonic 的方式,您可以将键的迭代器传递给您的函数:

def get_item(d,keys):
    try:            
        item = d[next(keys)]
    except KeyError:
        raise Exception("There is a mismatch within your keys")
    if isinstance(item, dict):
       return get_item(item,keys)
    return item

关于python 样式指南 pep 8。多行多列字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34696045/

相关文章:

python - 引用函数还是创建一个只调用另一个的新函数?

python - python中物理量的命名

javascript - 在 if 语句内部或外部声明变量是更好的做法吗?

python - 为什么我们有 lower_case_with_underscores 命名约定?

java - 是否可以在 Stash 预接收 Hook 中使用 pep8 和 yapf?

python - Pyparsing:语法在解析具有指数和对数函数的算术表达式时无法解析空格

php - 谷歌应用引擎 "Error parsing ./app.yaml: Unknown url handler type"

Python,我需要返回作为参数传入的对象吗?

python - Go 与 Python 的 crypt.crypt 等价的是什么?

python - 在 Django 3.0 中将任一模式与 re_path 匹配