我正在寻找一些帮助,理解为什么这不起作用。看起来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中,你知道吗? ..其实,你知道吗?你能帮我理解一下吗?
由于
答案 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'}