Python Language colecciones.defaultdict


Ejemplo

collections.defaultdict (default_factory) devuelve una subclase de dict que tiene un valor predeterminado para las claves que faltan. El argumento debe ser una función que devuelve el valor predeterminado cuando se llama sin argumentos. Si no se pasa nada, el valor predeterminado es None .

>>> state_capitals = collections.defaultdict(str)
>>> state_capitals
defaultdict(<class 'str'>, {})

devuelve una referencia a un defaultdict que creará un objeto de cadena con su método default_factory.

Un uso típico de defaultdict es usar uno de los tipos incorporados como str , int , list o dict como default_factory, ya que estos devuelven tipos vacíos cuando se les llama sin argumentos:

>>> str()
''
>>> int()
0
>>> list
[]

Llamar al valor predeterminado con una clave que no existe no produce un error como lo haría en un diccionario normal.

>>> state_capitals['Alaska']
''
>>> state_capitals
defaultdict(<class 'str'>, {'Alaska': ''})

Otro ejemplo con int :

>>> fruit_counts = defaultdict(int)
>>> fruit_counts['apple'] += 2  # No errors should occur
>>> fruit_counts
default_dict(int, {'apple': 2})
>>> fruit_counts['banana']  # No errors should occur
0
>>> fruit_counts  # A new key is created
default_dict(int, {'apple': 2, 'banana': 0})

Los métodos de diccionario normales funcionan con el diccionario predeterminado

>>> state_capitals['Alabama'] = 'Montgomery'
>>> state_capitals
defaultdict(<class 'str'>, {'Alabama': 'Montgomery', 'Alaska': ''})

El uso de list como default_factory creará una lista para cada nueva clave.

>>> s = [('NC', 'Raleigh'), ('VA', 'Richmond'), ('WA', 'Seattle'), ('NC', 'Asheville')]
>>> dd = collections.defaultdict(list)
>>> for k, v in s:
...     dd[k].append(v)
>>> dd
defaultdict(<class 'list'>, 
    {'VA': ['Richmond'], 
     'NC': ['Raleigh', 'Asheville'], 
     'WA': ['Seattle']})