我正在尝试添加字典,其中包含列表中每个元素的键和列表中一个后续元素的值。例如,如果键是"",则值为" cat"和"狗"。
我不确定为什么我在output[item] = f[i+1]
行上收到错误。
有人可以帮忙吗?
我的代码是:
line = ['The', 'cat', 'chased', 'the', 'dog']
output = {}
for i, item in enumerate(line):
output[item] = line[i+1]
print output
错误是:IndexError: list index out of range
output[item] = f[i+1]
答案 0 :(得分:4)
ozgur说的是什么,除非你从列表的第1版开始使用列表的版本压缩列表,否则你可以删除if
语句和枚举:
import collections
line = ['The', 'cat', 'chased', 'the', 'dog']
output = collections.defaultdict(list)
for (x, y) in zip(line, line[1:]):
output[x.lower()].append(y)
print(output)
答案 1 :(得分:2)
您需要在处理列表中的最后一个元素之前停止迭代,因为在最后一个元素之后没有next
项。
>>> import collections
>>> line = ['The', 'cat', 'chased', 'the', 'dog']
>>> output = collections.defaultdict(list)
>>> for i, item in enumerate(line):
... if i < len(line) - 1:
... output[item.lower()].append(line[i+1])
>>> print output
{'the': ['cat', 'dog'], 'chased': ['the'], 'cat': ['chased']}
或者,如果您想要消除if
;
>>> for i in range(len(line) - 1):
... output[line[i].lower()].append(line[i+1])
答案 2 :(得分:1)
行[0:4]有效,但行[5]不是。
试试这个:
line = ['The', 'cat', 'chased', 'the', 'dog']
output = {}
for i, item in enumerate(line):
print(i, item, len(line))
if i != len(line) - 1:
output[item] = line[i+1]
else:
output[item] = None
print(output)