2014-09-21 71 views
0

我正在尋找一些幫助理解爲什麼這不起作用。看起來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'))} 

期待它的工作,因爲也許它只是不會與現有的字典(這是什麼我要去這裏)?

唉,沒有骰子。現在

,我要指出,我知道,如果我這樣做:

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

我可以得到字典的情況發生,但我想給鍵添加到現有的字典,你知道嗎?其實,你知道嗎?你能幫我理解這一點嗎?

感謝

回答

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'} 
+0

哦不錯..這會做到這一點。肯定是我失蹤了。謝謝 – Inversus 2014-09-21 05:04:08

+0

再次感謝您指點我更新,絕對做到了。 – Inversus 2014-09-21 06:02:46

+0

@Inversus,你,歡迎。很高興幫助你。 – falsetru 2014-09-21 06:03:41