python中嵌套字典的行包装代码

2024-06-16 12:03:08 发布

您现在位置:Python中文网/ 问答频道 /正文

随着Alexa中新的Entity Resolution,嵌套字典变得非常嵌套。引用深度嵌套值的最具python风格的方法是什么?如何编写代码,使其保持在每行79个字符以内?在

这就是我目前所拥有的,虽然它有效,但我确信还有更好的方法:

if 'VolumeQuantity' in intent['slots']:
    if 'resolutions' in intent['slots']['VolumeQuantity']:
        half_decibels = intent['slots']['VolumeQuantity']['resolutions']['resolutionsPerAuthority'][0]['values'][0]['value']['name'].strip()
    elif 'value' in intent['slots']['VolumeQuantity']:
        half_decibels = intent['slots']['VolumeQuantity']['value'].strip()

下面是来自alexa的json的部分示例

^{pr2}$

Tags: 方法inif字典valuealexaentitystrip
2条回答

首先,您可以使用一些命名良好的中间变量使程序更可读、更简单、更快:

volumes = intent['slots']  # Pick meaningful names. I'm just guessing.
if 'VolumeQuantity' in volumes:
    quantity = volumes['VolumeQuantity']
    if 'resolutions' in quantity:
        half_decibels = quantity['resolutions']['resolutionsPerAuthority'][0]['values'][0]['value']['name'].strip()
    elif 'value' in quantity:
        half_decibels = quantity['value'].strip()

其次,您可以编写一个帮助函数nav(structure, path)来浏览这些结构,这样,例如

^{pr2}$

拆分给定路径并执行索引/查找操作序列。{{cd2>你不必这么做。在

您可能引用的是嵌套字典,列表只接受整数索引。在

不管怎样,(ab?)使用括号内的隐含行延续,我认为这是非常可读的:

>>> d = {'a':{'b':{'c':'value'}}}
>>> (d
...     ['a']
...     ['b']
...     ['c']
... )
'value'

或者另一种选择

^{pr2}$

相关问题 更多 >