Contando el número de claves distintas en un diccionario en Python

3 minutos de lectura

avatar de usuario
Dan

Tengo un diccionario que asigna palabras clave a la repetición de la palabra clave, pero solo quiero una lista de palabras distintas, así que quería contar la cantidad de palabras clave. ¿Hay alguna forma de contar la cantidad de palabras clave o hay otra forma de buscar palabras distintas?

  • Las claves en un diccionario de Python ya son distintas entre sí. No puede tener la palabra clave exacta como clave dos veces en un diccionario de Python. Por lo tanto, contar el número de claves es lo mismo que contar el número de claves distintas.

    – Flamm

    28 de abril de 2021 a las 8:57

avatar de usuario

len(yourdict.keys())

o solo

len(yourdict)

Si le gusta contar palabras únicas en el archivo, puede usar set y haz me gusta

len(set(open(yourdictfile).read().split()))

  • Sé que esta publicación es antigua, pero tenía curiosidad. ¿Es este el método más rápido? O es eso a método razonablemente rápido para diccionarios grandes?

    – john_ciencia

    1 de marzo de 2013 a las 3:40

  • Ambas cosas len(yourdict.keys()) y len(yourdict) son O(1). Este último es un poco más rápido. Vea mis pruebas a continuación.

    – Chih-Hsuan Yen

    17 de abril de 2016 a las 10:07

  • Me gustaría señalar que también puede buscar los valores (sé que la pregunta no lo hizo) con len(yourdict.values())

    – ntk4

    23 de septiembre de 2016 a las 5:49

El número de palabras distintas (es decir, el recuento de entradas en el diccionario) se puede encontrar usando el len() función.

> a = {'foo':42, 'bar':69}
> len(a)
2

Para obtener todas las palabras distintas (es decir, las claves), utilice el .keys() método.

> list(a.keys())
['foo', 'bar']

Vocación len() funciona directamente en su diccionario, y es más rápido que construir un iterador, d.keys()y llamando len() en él, pero la velocidad de cualquiera será insignificante en comparación con cualquier otra cosa que esté haciendo su programa.

d = {x: x**2 for x in range(1000)}

len(d)
# 1000

len(d.keys())
# 1000

%timeit len(d)
# 41.9 ns ± 0.244 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

%timeit len(d.keys())
# 83.3 ns ± 0.41 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

Si la pregunta es sobre contar la cantidad de palabras clave, recomendaría algo como

def countoccurrences(store, value):
    try:
        store[value] = store[value] + 1
    except KeyError as e:
        store[value] = 1
    return

en la función principal, tenga algo que recorra los datos y pase los valores a la función de conteo de ocurrencias

if __name__ == "__main__":
    store = {}
    list = ('a', 'a', 'b', 'c', 'c')
    for data in list:
        countoccurrences(store, data)
    for k, v in store.iteritems():
        print "Key " + k + " has occurred "  + str(v) + " times"

El código sale

Key a has occurred 2 times
Key c has occurred 2 times
Key b has occurred 1 times

avatar de usuario
ZF007

Se realizaron algunas modificaciones en la respuesta publicada UnderWaterKremlin para que sea a prueba de python3. Un resultado sorprendente a continuación como respuesta.

Especificaciones del sistema:

  • pitón =3.7.4,
  • conda = 4.8.0
  • 3,6 GHz, 8 núcleos, 16 gb.
import timeit

d = {x: x**2 for x in range(1000)}
#print (d)
print (len(d))
# 1000

print (len(d.keys()))
# 1000

print (timeit.timeit('len({x: x**2 for x in range(1000)})', number=100000))        # 1

print (timeit.timeit('len({x: x**2 for x in range(1000)}.keys())', number=100000)) # 2

Resultado:

1) = 37.0100378

2) = 37.002148899999995

Entonces parece que len(d.keys()) actualmente es más rápido que simplemente usar len().

avatar de usuario
msoler

Para contar el número de palabras clave en un diccionario:

def dict_finder(dict_finders):
    x=input("Enter the thing you want to find: ")
    if x in dict_finders:
        print("Element found")
    else:
        print("Nothing found:")

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad