Python 中将列表中的字符串映射到数字的字典

Ice*_*r42 5 python list

我有一个字符串列表,其中一些重复。例如(不是实际列表)

["hello", "goodbye", "hi", "how are you", "hi"]
Run Code Online (Sandbox Code Playgroud)

我想创建一个整数列表,其中每个整数对应一个字符串。例如上面的例子

[0, 1, 2, 3, 2]
Run Code Online (Sandbox Code Playgroud)

其中 0 =“你好”,1 =“再见”等。

我在这里查看了示例:将整数列表转换为 Python 中预定义字符串的列表

我想做基本上相同的事情,但相反,字符串到整数。这部分应该不会太难。

然而,他们似乎只是在代码中创建字典,如下所示:

trans = {0: 'abc', 1: 'f', 2: 'z'}
Run Code Online (Sandbox Code Playgroud)

当您知道列表的确切内容时,自己创建字典就可以了。我的字符串列表非常长,我不知道这些字符串是什么,因为它来自输入。所以我需要以其他方式从我的字符串列表中创建字典,比如 for 循环。

我不知道如何制作一个字典,将列表中的字符串映射到数字。我查找了如何制作带有列表理解的字典,但我不知道它如何处理重复项。

换句话说,我想知道如何浏览像上面的字符串列表这样的列表并创建一个字典,例如:

{"hello": 0, "goodbye": 1, "hi": 2, "how are you": 3}
Run Code Online (Sandbox Code Playgroud)

编辑:我有很多答案,感谢大家的帮助。我现在感到困惑的是执行此操作的所有不同方法。已经有很多建议,使用enumerate()set()以及其他功能。还有一个答案(@ChristianIacobs)只需一个 for 循环就可以非常简单地完成它。我想知道是否有任何理由使用稍微不那么简单的答案之一?例如,它们是否更快,或者在某些情况下它们是唯一有效的方法?

jen*_*nce 1

words = ["hello", "goodbye", "hi", "how are you", "hi"]

d = dict()
i = 0
for word in words:
    if word not in d:
        d[word] = i
        i += 1
print(d)
#print(sorted(d.items(), key=lambda kv: kv[1])) print them sorted
Run Code Online (Sandbox Code Playgroud)