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'
我正在将我的 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'