2014-05-21 2 views
-3

Может ли кто-нибудь сказать мне, почему эта функция дает мне KeyError?Python KeyError в словаре, содержащем список

def countLinks(url): 
    urlCounter = {"dummy":[0,0]} 
    urlList = getLinks(url) 
    for x in urlList: 
     if x in urlCounter: 
      urlCounter[x][1] += 1 
     else: 
      urlCounter[x][1] = 1 
    return urlCounter 

getLinks просто возвращает список ссылок HTML в нем.

Причина второго значения в том, что мне нужно отслеживать, прошел ли этот URL-адрес.

BTW Python 3.0 б/у.

Многие ТНХ заранее

+3

'если х (не) в urlCounter:' и 'urlCounter [х] [1] = 1 'вы обращаетесь ключ, когда вы знаете, что это не в Словаре. неудивительно, что есть ключевой террор. – njzk2

+0

проклятый, без списка в качестве значения он работал и просто добавил, что ключ и значение. Thx за совет, я думаю, что я могу знать решение :-) – Masupilami

+0

работал как эта – Masupilami

ответ

2
for x in urlList: 
     if x in urlCounter: 
      urlCounter[x][1] += 1 
     else: 
      urlCounter[x][1] = 1 # you need to create the dict entry here too. 

В этой ситуации при проверке, если ДИКТ имеет ключ и создать его, если он не существует, важно помнить, чтобы создать его.

for x in urlList: 
     if x in urlCounter: 
      urlCounter[x][1] += 1 
     else: 
      urlCounter[x] = [0,1] 
+0

THX, это именно то, чего мне не хватало! hail stack overflow :-) – Masupilami

+0

Используя ['collections.Counter'] (https://docs.python.org/2/library/collections.html#collections.Counter) или, по крайней мере, [' defaultdict'] (https: //docs.python.org/2/library/collections.html#collections.defaultdict) будет гораздо более идиоматичным Python. –

+0

Я просто новичок, но я посмотрю на это! – Masupilami

Смежные вопросы