我正在尝试使用一个名为bidi的Python包。 在这个包中的一个模块(algorithm.py)中,有一些行给出了错误,尽管它是包的一部分。
下面是台词:
_LEAST_GREATER_ODD = lambda x: (x + 1) | 1
_LEAST_GREATER_EVEN = lambda x: (x + 2) & ~1
X2_X5_MAPPINGS = {
'RLE': (_LEAST_GREATER_ODD, 'N'),
'LRE': (_LEAST_GREATER_EVEN, 'N'),
'RLO': (_LEAST_GREATER_ODD, 'R'),
'LRO': (_LEAST_GREATER_EVEN, 'L'),
}
# Added 'B' so X6 won't execute in that case and X8 will run its course
X6_IGNORED = X2_X5_MAPPINGS.keys() + ['BN', 'PDF', 'B']
X9_REMOVED = X2_X5_MAPPINGS.keys() + ['BN', 'PDF']
如果我在Python 3中运行代码,就会收到以下错误消息:
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
from bidi.algorithm import get_display
File "C:\Python33\lib\site-packages\python_bidi-0.3.4-py3.3.egg\bidi\algorithm.py", line 41, in <module>
X6_IGNORED = X2_X5_MAPPINGS.keys() + ['BN', 'PDF', 'B']
TypeError: unsupported operand type(s) for +: 'dict_keys' and 'list'
虽然这是bidi包的一部分,但为什么会出现此错误?这和我的Python版本有关系吗?我很感激你的帮助。
是的,这与您的Python版本有关。在Python 2.x中,
dict.keys
返回字典键的列表。在Python3.x中,它提供了view object个键。您可以对结果调用} on the entire dictionary as a shortcut 。
list()
,使其成为列表or just call ^{在Python 3.x中,
dict.keys
返回一个dictionary view:通过将这些视图放入^{} ,您可以得到所需的内容:
实际上,您甚至不再需要
.keys
,因为在字典上迭代会产生它的键:在Python 3.x中,
dict.keys
不返回列表,而是返回一个view
对象,dict_keys
。要实现您的目标,您需要将其转换为一个列表:
相关问题 更多 >
编程相关推荐