我正在查看单个单词列表并创建一个字典,其中单词是键,单词的索引是值。
dictionary = {}
for x in wordlist:
dictionary[x] = wordlist.index(x)
此刻此功能正常,但我希望在第二次或第三次发现相同的单词时添加更多索引。所以如果短语是“我要去城里”,我会正在寻找这样的字典:
{'I': 0, 'am' : 1, 'going' : 2, 'to': (3, 5), 'go' : 4, 'town' : 6}
所以我想我需要字典里面的列表?然后为它们添加更多索引?关于如何实现这一目标的任何建议都会很棒!
答案 0 :(得分:7)
你可以这样做:
dictionary = {}
for i, x in enumerate(wordlist):
dictionary.setdefault(x, []).append(i)
说明:
index()
。使用enumerate()
更有效,更酷。dict.setdefault()
使用第一个参数作为键。如果找不到,则插入第二个参数,否则忽略它。然后它返回(可能是新插入的)值。list.append()
将该项目附加到列表中。你会得到这样的东西:
{'I': [0], 'am' : [1], 'going' : [2], 'to': [3, 5], 'go' : [4], 'town' : [6]}
使用列表而不是元组,并使用列表,即使它只是一个元素。我觉得这样比较好。
<强>更新强>:
@millimoose对OP的评论无耻地启发(谢谢!),这段代码更好更快,因为它不构建大量永远不会插入字典的[]
:
import collections
dictionary = collections.defaultdict(list)
for i, x in enumerate(wordlist):
dictionary[x].append(i)
答案 1 :(得分:2)
>>> wl = ['I', 'am', 'going', 'to', 'go', 'to', 'town']
>>> {w: [i for i, x in enumerate(wl) if x == w] for w in wl}
{'town': [6], 'I': [0], 'am': [1], 'to': [3, 5], 'going': [2], 'go': [4]}
答案 2 :(得分:0)
对象是对象,无论它们在何处。
dictionary[x] = []
...
dictionary[x].append(y)
答案 3 :(得分:0)
可能的解决方案:
dictionary= {}
for i, x in enumerate(wordlist):
if not x in dictionary : dictionary[x]= []
dictionary[x].append( i )
答案 4 :(得分:0)
import collections
dictionary= collections.defaultdict(list)
for i, x in enumerate( wordlist ) :
dictionary[x].append( i )