首页 > 解决方案 > 用特定数值替换 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]

我知道这可以通过pandasmap功能来完成。但是如果我有 50 个不同的类别呢?为每个类别写不同的案例会很愚蠢吗?有没有办法自动做到这一点?

标签: python

解决方案


这可以简单地通过列表理解来完成,而无需使用 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]

推荐阅读