Het aantal verschillende sleutels in een woordenboek in Python tellen

Ik heb een woordenboek dat trefwoorden toewijst aan de herhaling van het trefwoord, maar ik wil alleen een lijst met afzonderlijke woorden, dus ik wilde het aantal trefwoorden tellen. Is er een manier om het aantal zoekwoorden te tellen of moet ik op een andere manier naar verschillende woorden zoeken?


Antwoord 1, autoriteit 100%

len(yourdict.keys())

of gewoon

len(yourdict)

Als u unieke woorden in het bestand wilt tellen, kunt u gewoon setin en doe zoals

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

Antwoord 2, autoriteit 7%

Het aantal verschillende woorden (d.w.z. het aantal vermeldingen in het woordenboek) kan worden gevonden met de functie len().

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

Gebruik de .keys()methode om alle afzonderlijke woorden (d.w.z. de sleutels) te krijgen.

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

Antwoord 3, autoriteit 2%

Het rechtstreeks aanroepen van len()in uw woordenboek werkt en is sneller dan het bouwen van een iterator, d.keys(), en het aanroepen van len()erop, maar de snelheid van beide zal verwaarloosbaar zijn in vergelijking met wat je programma verder doet.

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)

Antwoord 4

Als de vraag gaat over het tellen van het aantal zoekwoorden, raad dan iets aan als

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

in de hoofdfunctie iets hebben dat door de gegevens loopt en de waarden doorgeeft aan de functie countoccurrences

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"

De code-uitvoer

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

Antwoord 5

Er zijn enkele wijzigingen aangebracht in het geplaatste antwoord UnderWaterKremlin om het python3-proof te maken. Een verrassend resultaat hieronder als antwoord.

Systeemspecificaties:

  • python =3.7.4,
  • conda = 4.8.0
  • 3,6 GHz, 8 cores, 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

Resultaat:

1) = 37.0100378

2) = 37.002148899999995

Dus het lijkt erop dat len(d.keys())momenteel sneller is dan alleen gebruik van len().


Antwoord 6

Om het aantal zoekwoorden in een woordenboek te tellen:

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:")

Other episodes