¿Cómo se ordena Counter / defaultdict en Python 3.7?

Sabemos que en Python 3.6 los diccionarios se ordenan por inserción como un detalle de implementación, y en 3.7 se puede confiar en el orden de inserción.

Esperaba que este también fuera el caso para las subclases dedict comocollections.Counter ycollections.defaultdict. Pero esto parece ser cierto solo para ladefaultdict case.

Así que mis preguntas son:

¿Es cierto que el orden se mantiene paradefaultdict pero no paraCounter? Y, si es así, ¿hay una explicación directa?ebería ordenar estosdict subclases en elcollections módulo se considerará detalles de implementación? O, por ejemplo, ¿podemosconfia endefaultdict siendo la inserción ordenada comodict en Python 3.7 +?

Aquí están mis pruebas rudimentarias:

dict: ordenó

words = ["oranges", "apples", "apples", "bananas", "kiwis", "kiwis", "apples"]

dict_counter = {}
for w in words:
    dict_counter[w] = dict_counter.get(w, 0)+1

print(dict_counter)

# {'oranges': 1, 'apples': 3, 'bananas': 1, 'kiwis': 2}

Contador: desordenado

from collections import Counter, defaultdict

print(Counter(words))

# Counter({'apples': 3, 'kiwis': 2, 'oranges': 1, 'bananas': 1})

defaultdict: ordenado

dict_dd = defaultdict(int)
for w in words:
    dict_dd[w] += 1

print(dict_dd)

# defaultdict(<class 'int'>, {'oranges': 1, 'apples': 3, 'bananas': 1, 'kiwis': 2})

Respuestas a la pregunta(1)

Su respuesta a la pregunta