2016-12-07 55 views
0

Python字典是地圖。用方括號,我們分配和訪問一個鍵的值。用get()我們可以指定一個默認結果。python字典錯誤正在發生中

但爲什麼會發生這種情況?

cu = {} 
for p in soup.find_all('p'): 
    parent = p.findParent() 
    if parent not in cu.keys(): 
     cu[parent]=[] 
    cu[parent].append(p) 
for key in cu.keys(): 
    bolok = '<div class="test">' 
    for block in cu[key]: 
     bolok += str(block) 
    bolok+='</div>' 
    cu[key][0].replace_with(soup.new_tag('test')) 


>> cu.keys()[0] 
>> <div class="inner">\n<span class="icon major fa-cloud"></span>\n<h1>Hi, I'm <strong>Photon</strong>, another fine<br/>\r\n\t\t\t\t\tlittle freebie from <a href="http://html5up.net">HTML5 UP</a>.</h1>\n<div></div>\n<ul class="actions">\n<li><a class="button scrolly" href="#one">Discover</a></li>\n</ul>\n</div> 


>> cu[cu.keys()[0]] 

>> Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
KeyError: <div class="inner">\n<span class="icon major fa-cloud"></span>\n<h1>Hi, I'm <strong>Photon</strong>, another fine<br/>\r\n\t\t\t\t\tlittle freebie from <a href="http://html5up.net">HTML5 UP</a>.</h1>\n<div></div>\n<ul class="actions">\n<li><a class="button scrolly" href="#one">Discover</a></li>\n</ul>\n</div> 
+2

這不能在python 3中工作。您可以提供[mcve]。請不要使用'dict'作爲你的變量。 –

+2

請注意,'dict'已經意味着Python中的某些東西。 – Iluvatar

+0

'dict.keys()'沒有意義。你需要一個'dict'的實例,它保存着'keys()' –

回答

0

是絕對沒有理由要做到這一點

>>> d={'uu':55} 
>>> d[d.keys()[0]] 
55 

除非你(無意)修改你的字典同時

編輯 感謝編輯你的問題。

,你首先應該使用defaultdict,你不會有初始化空列表:

from collections import defaultdict 
cu = defaultdict(list) 
for p in soup.find_all('p'): 
    parent = p.findParent() 
    cu[parent].append(p) 

然後,如果你不需要他們不遍歷鍵,嘗試values

for blocks in cu.values(): 
    bolok = '<div class="test">' 
    for block in blocks: 
     bolok += str(block) 
    bolok += '</div>' 
    blocks[0].replace_with(soup.new_tag('test')) 
+0

興奮,但它does.those字符串實際上是bs4對象。鍵是父元素,值是子元素。可能與編碼或某事有關? –

+1

值得注意的是'd.keys()[0]'在Python 3中不起作用,因爲字典視圖不支持索引 –

+0

確定,所以鍵不是字符串,而是BeautifulSoup對象?你能告訴我一個你如何構建字典的例子嗎? – Saksow

0

你正在使用哪個python版本。請使用python 2檢查以下示例。

cu = {"""<div class="inner">\n<span class="icon major fa-cloud"></span>\n<h1>Hi, I'm <strong>Photon</strong>, another fine<br/>\r\n\t\t\t\t\tlittle freebie from <a href="http://html5up.net">HTML5 UP</a>.</h1>\n<div></div>\n<ul class="actions">\n<li><a class="button scrolly" href="#one">Discover</a></li>\n</ul>\n</div>""":1} 
cu[cu.keys()[0]]