python - 字典键值仅显示唯一结果而不是全部
问题描述
然后我corpus_test
将他升级为按单词拆分的列表。我需要dictionarys
从这个和len
文本单词中获得 2 个。问题是唯一值。我需要所有这些,甚至是重复的。
corpus_test = 'cat dog tiger tiger tiger cat dog lion'
corpus_test = [[word.lower() for word in corpus_test.split()]]
word_counts = defaultdict(int)
for rowt in corpus_test:
for wordt in rowt:
word_counts[wordt] += 1
index_wordso = dict((i, word) for i, word in enumerate(rowt))
word_indexso = dict((word, i) for i, word in enumerate(rowt))
v_countso = len(index_wordso)
我的代码用index_wordso
and给了我正确的输出v_countso
:
index_wordso
#{0: 'cat',
1: 'dog',
2: 'tiger',
3: 'tiger',
4: 'tiger',
5: 'cat',
6: 'dog',
7: 'lion'}
v_countso
#8
但是(与word_indexso
成反比)给了我不正确的输出:dict
index_wordso
word_indexso
#{'cat': 5, 'dog': 6, 'tiger': 4, 'lion': 7}
那只是给我最后的价值,而不是全部。我需要所有 8 个值
解决方案
字典中的键是唯一的,值不是。它就像一本单词词典:一个单词可以有多个定义,但不能有多个单词列表。
一种解决方法是使用元组列表:
corpus_test = 'cat dog tiger tiger tiger cat dog lion'
corpus_test = [word.lower() for word in corpus_test.split()]
print([(a,b) for (a, b) in zip(corpus_test, range(len(corpus_test)))])
这导致
[('cat', 0),
('dog', 1),
('tiger', 2),
('tiger', 3),
('tiger', 4),
('cat', 5),
('dog', 6),
('lion', 7)]
但请记住,这不是查找表,因此您必须(以某种方式)遍历元素以找到特定元素。
另一种方法是使用列表字典:
from collections import defaultdict
word_indexso = defaultdict(list)
corpus_test = 'cat dog tiger tiger tiger cat dog lion'.split()
for index, word in enumerate(corpus_test):
word_indexso[word].append(index)
print(word_indexso)
这导致
defaultdict(<class 'list'>, {'cat': [0, 5], 'dog': [1, 6], 'tiger': [2, 3, 4], 'lion': [7]})
可以使用例如查找word_indexso["cat"]
与该单词关联的数字列表。