寻求帮助理解为什么这个词汇理解失败了

时间:2014-09-21 04:57:15

标签: python python-3.x dictionary python-3.4

我正在寻找一些帮助,理解为什么这不起作用。看起来python不会在字典理解中创建现有字典中的键,但这听起来像是一个糟糕的笑话......更可能的是,我只是遗漏了一些东西。

所以我在这里。坚持这个:

## let's say, for the sake of argument: len(bigstr.split('\n')) < 1000 
indexed = {1000:'stuff', 1001:'in here', 1002:'lots', 1003:'of it'}
{indexed[idx]:item.strip() for idx, item in enumerate(bigstr.split('\n'))}

哪个会起作用(而不是触发KeyError: 0,如果它写成:

indexed = {1000:'stuff', 1001:'in here', 1002:'lots', 1003:'of it'}
for idx, item in enumerate(bigstr.split('\n')):
    indexed[idx] = item.strip()

事实上,以前的代码片段工作得很好,它使第一个工作。惊人!

所以我认为我会聪明并做一些事情(在一个新的会议中),如:

indexed = {1000:'stuff', 1001:'in here', 1002:'lots', 1003:'of it'}
new_items_only = {indices[idx]:item.strip() for idx, item in enumerate(bigstr.split('\n'))}

期待它能够发挥作用,因为它可能只适用于现有的dict(这就是我在这里的意思)?

唉,没有骰子。

现在,我应该提一下,如果我这样做,我知道:

indices = {indices:item.strip() for idx, item in enumerate(bigstr.split('\n'))}

我可以让dict发生,但我想将密钥添加到现有的dict中,你知道吗? ..其实,你知道吗?你能帮我理解一下吗?

由于

1 个答案:

答案 0 :(得分:2)

您可以使用dict.update

>>> indexed = {1000:'stuff', 1001:'in here', 1002:'lots', 1003:'of it'}
>>> bigstr = 'x\ny\nz'
>>> indexed.update({idx:item.strip() for idx, item in enumerate(bigstr.split('\n'))})
>>> indexed
{0: 'x', 1: 'y', 2: 'z', 1000: 'stuff', 1001: 'in here', 1002: 'lots', 1003: 'of it'}