AttributeError: 'dict_values' object has no attribute 'index'

AttributeError: 'dict_values' object has no attribute 'index'

我正在将我的 Python2.x 转换为 Python3.x 代码,它抛出了这个错误:

Python 3.7.8 (default, Jun 29 2020, 05:46:05) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> config_order = {
...                     'groups.jinja2': 0 ,
...                     'system.jinja2': 1 ,
...                     'interfaces.jinja2': 2,
...                     'chassis.jinja2': 3 ,
...                     'snmp.jinja2': 4 ,
...                     'routing-options.jinja2': 5 ,
...                     'policy-options.jinja2': 6 ,
...                     'security.jinja2': 7 ,
...                     'routing-instances.jinja2': 8
...         }
>>> template = config_order.keys()[config_order.values().index(element)]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'dict_values' object has no attribute 'index'
>>> 

如何将我的字典值转换为列表以便我可以使用 'index' 函数?

在 Python 字典中按值查找关键字

您需要将 config_order.keys()config_order.values() 转换为列表:

list(config_order.keys())[list(config_order.values()).index(element)]

但是这个解决方案很难读懂。考虑一下这个:

next(k for k, v in config_order.items() if v == element)

或者如果你想要 fault-tolerant/default 值:

next((k for k, v in config_order.items() if v == 10), None)

示例:

next(k for k, v in config_order.items() if v == 7)

输出:

'security.jinja2'

next((k for k, v in config_order.items() if v == 70), 'default')

输出:

'default'