【发布时间】:2019-02-10 22:30:30
【问题描述】:
我有大量的字符串要转换为整数。在 Python 3.7 中执行列表的字典查找最简洁的方法是什么?
例如:
d = {'frog':1, 'dog':2, 'mouse':3}
x = ['frog', 'frog', 'mouse']
result1 = d[x[0]]
result2 = d[x]
result 等于 1 但result2 是不可能的:
TypeError Traceback (most recent call last)
<ipython-input-124-b49b78bd4841> in <module>
2 x = ['frog', 'frog', 'mouse']
3 result1 = d[x[0]]
----> 4 result2 = d[x]
TypeError: unhashable type: 'list'
一种方法是:
result2 = []
for s in x:
result2.append(d[s])
这会导致 [1, 1, 3] 但需要一个 for 循环。这对于大型列表是否最佳?
【问题讨论】:
-
您对
result2有什么期望?目前还不清楚输出应该是什么。您是否阅读过有关该错误的其他各种帖子? -
你的意思是像
[d[k] for k in x]这样的东西吗? -
@jonrsharpe 结果应该是
[1, 1, 3]。编辑以提供可能的结果。 -
@Tomothy32 是的。这是否等同于示例,还是我应该预期性能提升,因为您的迭代器可以事先确定大小?
-
@Steve 通常,列表推导比 for 循环更快。另一种选择是
list(map(d.get, x))。你应该自己尝试每一个解决方案,看看什么是最好的。根据我的尝试,itemgetter是最快的。
标签: python python-3.x dictionary