Há apenas uma única alteração entre dois snippets de código, o primeiro deles usa:
count = count + keywords[key]
enquanto o segundo usa:
count = count + key
No caso do primeiro, você está pegando o valor de uma chave do dicionário e adicionando o valor à contagem anterior.
Enquanto no segundo caso você está adicionando a própria chave (string) à contagem de números inteiros, o que está dando um erro esperado.
Isso vai deixar você mais claro:
#!/usr/bin/env python2
def total(initial=10, *numbers, **keywords):
count = initial
for fake in numbers:
count = count + fake
for key in keywords:
print 'key is: ' + key
print 'keyword is: ' + str(keywords)
count = count + keywords[key]
return count
Eu adicionei duas linhas para verificar os valores para os quais minha entrada está sendo interpretada.
Agora, quando eu corro:
print total(10, 5, fruits=10)
dá:
key is: fruits
keyword is: {'fruits': 10}
25
Sugiro que você escolha os tipos de dados básicos usados em python
.