llenar un diccionario sin usar try excepto

Supongamos que tengo un diccionario y quiero llenar eso con algunas claves y valores, el primer diccionario está vacío y supongo que necesito este diccionario para un contador, por ejemplo, cuente algunas claves en una cadena que tengo de esta manera:

myDic = {} try : myDic[desiredKey] += 1 except KeyError: myDic[desiredKey] = 1 

O tal vez algunas veces los valores deberían ser una lista y necesito agregar algunos valores a una lista de valores que tengo de esta manera:

 myDic = {} try: myDic[desiredKey].append(desiredValue) except KeyError: myDic[desiredKey] = [] myDic[desiredKey].append(desiredValue) 

¿Existe una alternativa mejor para este trabajo (ambos) que no usa la sección de try except ?

Puede usar collections.defaultdict() que le permite suministrar una función a la que se llamará cada vez que se acceda a una clave faltante.

Y para su primer ejemplo, puede pasarle int como la función que falta, que se evaluará como 0 la primera vez que se acceda.

Y para el segundo puedes pasar la list .

Ejemplo:

 from collections import defaultdict my_dict = defaultdict(int) >>> lst = [1,2,2,2,3] >>> for i in lst: ... my_dict[i]+=1 ... >>> >>> my_dict defaultdict(, {1: 1, 2: 3, 3: 1}) >>> my_dict = defaultdict(list) >>> >>> for i,j in enumerate(lst): ... my_dict[j].append(i) ... >>> my_dict defaultdict(, {1: [0], 2: [1, 2, 3], 3: [4]}) 

Sugiero collections.defaultdict

 from collections import defaultdict myDic = defaultdict(int) myDic[key] = value 

Como lo expresó adecuadamente el alquimista de dos bits, lo mejor de defaultdict es cuando necesita varias claves de valor ( sin tener que definir el valor como una lista primero). Usar d["key"] = value nuevamente solo restablecería el valor anterior, Entonces:

 myDic = defaultdict(list) for key in keys_list: myDic[key].append(value) 

La mejor manera de hacerlo es con la excelente python in :

 myDic = {} if desiredKey in myDict: myDic[desiredKey] += 1 else: myDic[desiredKey] = 1 

Prueba esto:

 myDic = {} myDic['desiredKey'] = myDic.get('desiredKey', 0) + 1 

Y similar para su caso de lista:

 myDic = {} myDic['desiredKey'] = myDic.get('desiredKey', []) + [desiredValue] 

El método .get para un dict devolverá el valor y por defecto a None lugar de lanzar una excepción. También puede especificar el valor de retorno predeterminado como segundo parámetro .get(key, default) .