Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中将列表中的字符串映射到数字的字典_Python_List - Fatal编程技术网

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

在Python中将列表中的字符串映射到数字的字典,python,list,Python,List,我有一个字符串列表,其中有一些重复的字符串。e、 g.(不是实际清单) 我想创建一个整数列表,其中每个整数对应一个字符串。 e、 g.对于上面的例子 [0, 1, 2, 3, 2] 其中0=“你好”,1=“再见”等 我在这里看了一个例子: 我想做基本相同的事情,但反过来,字符串到整数。那部分不应该太难 但是,他们似乎只是在代码中创建字典,如下所示: trans = {0: 'abc', 1: 'f', 2: 'z'} 当您知道列表的确切内容时,自己创建字典就可以了。我的字符串列表非常长,我不

我有一个字符串列表,其中有一些重复的字符串。e、 g.(不是实际清单)

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

[0, 1, 2, 3, 2]
其中0=“你好”,1=“再见”等

我在这里看了一个例子:

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

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

trans = {0: 'abc', 1: 'f', 2: 'z'}
当您知道列表的确切内容时,自己创建字典就可以了。我的字符串列表非常长,我不知道字符串是什么,因为它来自输入。所以我需要从我的字符串列表中以其他方式创建字典,比如for循环

我不知道如何制作一本字典,将列表中的字符串映射为数字。我查阅了如何制作一本包含列表理解的词典,但我不知道它是如何处理重复项的

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

{"hello": 0, "goodbye": 1, "hi": 2, "how are you": 3}
编辑:我有很多答案,谢谢大家的帮助。我现在感到困惑的是所有不同的方法。使用
enumerate()
set()
和其他函数有很多建议。还有一个答案(@ChristianIacobs)非常简单,只需要一个for循环。我想知道的是,是否有任何理由使用稍微不那么简单的答案之一?例如,它们是否更快,或者在某些情况下它们是唯一有效的方法?

尝试以下方法:

>>> w = ["hello", "goodbye", "hi", "how are you", "hi"]
>>> l = [0, 1, 2, 3, 2]
>>> trans = {l1:w1 for w1,l1 in zip(w,l)}
>>> trans
{0: 'hello', 1: 'goodbye', 2: 'hi', 3: 'how are you'}

您可以通过以下步骤完成此操作:

  • 使用
    set
  • 使用
    enumerate
  • 循环单词以获得其指定的编号
您可以通过下面的代码段获得预期的输出

words=[“你好”、“再见”、“你好”、“你好”]
唯一单词=集合(单词)
单词映射={word:i代表i,枚举中的单词(唯一单词)}
结果=[words\u映射[word]for words in words]
打印(结果)

@jonrsharpe,我不一定担心它们是指数。我基本上希望每个唯一的字符串都有一个唯一的整数,这样字符串就可以被对应的整数替换

然后流程如下:

  • 确定我们需要的钥匙的
    集合
    (原始列表中的每个项目)

  • 为每个元素分配一个值-最简单的方法是再次为该集合创建一个
    列表
    (因为根据定义,元素现在是唯一的),并使用该列表中元素的索引。为了构建这种映射,我们可以使用
    enumerate
    的技巧,就像@jornsharpe已经提出的那样

  • 通过映射转换原始列表

因此:


要从列表中创建词典,首先需要消除重复的值。使用集合来实现以下目标:

my_list = ["hello", "goodbye", "hi", "how are you", "hi"]
unique_list = list(set(my_list))

['hi', 'hello', 'goodbye', 'how are you']
现在,您可以通过压缩带有一系列数字的唯一列表来创建词典:

my_dict = dict(zip(unique_list, range(len(unique_list))))

{'hi': 0, 'hello': 1, 'goodbye': 2, 'how are you': 3}

这是我的想法。这将在评论中解释。假设您有一个只包含单词的文件

import re#导入re模块
短语={}#创建字典
file=open(“/path/to/file”,“r”)#打开包含所有短语的文件。
Data=file.read()#读取文件。
cleanedData=re.split(“[\s |\r |\n]”,Data)#删除空白。
对于cleanedData中的word:
如果不是短语中的单词:#检查该单词是否已在词典中。
短语[单词]=(len(短语)+1)#将单词设置为一个键,该键的值从1开始并自动增加,但仅当该键不存在时才添加。
file.close()文件

ans的设计非常简单。你只需要两行就可以做到

该守则是—

l = ['hello', 'goodbye', 'hi', 'how are you', 'hi']
{a: b for b,a in enumerate(l)}

这里枚举创建一个元组(index,value),然后使用for循环进行理解

您可以尝试以下操作:

vocab_dict={word:索引的索引,枚举中的单词(列表(集合(单词))}

如果单词列表来自上述示例,则上述词汇的内容如下所示:

语音
{“你好”:0,“你好”:1,“再见”:2,“你好”:3}

dict(枚举(单词))
?或者
{word:index表示索引,word在enumerate(words)中}
表示相反。这将为您提供每个单词的最后一个索引。那么您希望忽略重复项吗?
dict(zip(数字列表,字符串列表))
?@jornsharpe,我不必担心它们是索引。我基本上希望每个唯一的字符串都有一个唯一的整数,这样字符串就可以被对应的整数替换。@MegaEmailman,我只是想制作一个字典,用一个唯一的整数来标识每个唯一的字符串。所以字典里不应该有任何重复的内容。然后我可以浏览这个列表,制作一个新的列表,用它的等效数字替换每个字符串。实际上,
enumerate
可以直接在
集合(原始)
上使用,但我认为这对于教学目的来说更为清晰。这种方法似乎最简单,我肯定是用我尝试过的东西过度复杂化了。我只是想知道我使用dict()还是{}是否重要?@IceWarrior42检查这个问题,这样dict()会慢一些吗?或者dict()是这种情况下唯一有效的吗?这在我的程序中似乎有效,所以我将接受它。我仍然很好奇其他答案可能有什么好处。
my_list = ["hello", "goodbye", "hi", "how are you", "hi"]
unique_list = list(set(my_list))

['hi', 'hello', 'goodbye', 'how are you']
my_dict = dict(zip(unique_list, range(len(unique_list))))

{'hi': 0, 'hello': 1, 'goodbye': 2, 'how are you': 3}
l = ['hello', 'goodbye', 'hi', 'how are you', 'hi']
{a: b for b,a in enumerate(l)}