"对于单位,对象在枚举"不按我认为的那样工作

时间:2016-01-19 19:43:06

标签: python

有人可以告诉我如何解决我遇到的这个小代码问题。

我的代码:

dictionary = {}      
word_pos_list = []

for unit, object in enumerate(words_list, start = 1):

  if object in dictionary:  
      word_pos_list.append(dictionary[object])    

  else:                                   
      dictionary[object] = unit     
      word_pos_list.append(unit) 

这是我遇到的问题。

将此作为变量的单词列表示例' words_list':['this', 'sentence', 'is', 'a', 'very', 'very', 'good', 'sentence']

我最终得到的结果是:[1, 2, 3, 4, 5, 5, 7, 2]

当在句子中再次找到一个单词时,字典中的值正确显示,如“'非常”一词所示。 (第5号)但我失去了下一个单位'值,在这个例子中它是第6号,因为你可以看到句子中的下一个唯一单词最终为7。

我该怎么做才能阻止这种情况发生?提前感谢您的时间和帮助。

2 个答案:

答案 0 :(得分:1)

看起来你并没有真正寻找句子中单词的位置enumerate给你,但你有多少不同的单词到目前为止已见过。为此,您只需检查当前字典中的条目数。

dictionary = {}
word_pos_list = []
for word in sentence:   
    if word not in dictionary:
        dictionary[word] = len(dictionary) + 1
    word_pos_list.append(dictionary[word])

对于您的句子,word_pos_list将为[1, 2, 3, 4, 5, 5, 6, 2]

答案 1 :(得分:0)

正如其中一条评论所述,似乎没有充分的理由在这里使用enumerate。手动计算物品数据会更清晰。

words_list = ['this', 'sentence', 'is', 'a', 'very', 'very', 'good', 'sentence']

dictionary = {}      
word_pos_list = []

counter = 0
for word in words_list:
    if word not in dictionary:
        counter += 1
        dictionary[word] = counter

    word_pos_list.append(dictionary[word])

print word_pos_list # [1, 2, 3, 4, 5, 5, 6, 2]