python - 用特定数值替换 Python 列表中的字符串值
问题描述
我想用特定的数值替换 Python 列表中的字符串值。例如,如果我有列表:
l = ["orange", "lemon", "apple", "orange", "apple","orange", "lemon","lemon", "apple", "grape", "grape", "lemon", "grape"]
我想得到:
l = [1, 2, 3, 1, 3, 2, 2, 3, 4, 4, 2, 4]
我知道这可以通过pandas
和map
功能来完成。但是如果我有 50 个不同的类别呢?为每个类别写不同的案例会很愚蠢吗?有没有办法自动做到这一点?
解决方案
这可以简单地通过列表理解来完成,而无需使用 Pandas:
>>> [l.index(i) + 1 for i in l]
[1, 2, 3, 1, 3, 1, 2, 2, 3, 10, 10, 2, 10]
请注意,结果中的每个值对于给定的字符串都是唯一的。
更新:如果你想在你的问题中有确切的输出,它有点复杂。由于 Python 没有内置的OrderedSet
,您可以使用OrderedDict
它来模仿它并按顺序提取唯一值:
>>> from collections import OrderedDict
>>> unique_elements = OrderedDict(zip(l, range(len(l))))
>>> d = dict(zip(unique_elements, range(1, 1 + len(unique_elements))))
>>> [d[i] for i in l]
[1, 2, 3, 1, 3, 1, 2, 2, 3, 4, 4, 2, 4]