将键,值添加到字典中

时间:2015-07-29 02:47:15

标签: python dictionary

我正在尝试添加字典,其中包含列表中每个元素的键和列表中一个后续元素的值。例如,如果键是"",则值为" 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]

3 个答案:

答案 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)