2017-04-15 3 views
0

J'ai un dictionnaire de dictionnaire et j'ai besoin de compter combien de fois les paires de lettres se produisent dans une chaîne donnée. J'ai eu les dictionnaires au travail, je suis juste complètement coincé sur la façon de faire fonctionner un compteur pour cela ...Python Dictionary frequency

Quoi qu'il en soit, voici ce que j'ai obtenu. Toute aide est appréciée

test = 'how now, brown cow, ok?' 

def make_letter_pairs(text): 
    di = {} 
    total = len(text)  

    for i in range(len(text)-1): 
     ch = text[i] 
     ach = text[i+1] 
     if ch in ascii_lowercase and ach in ascii_lowercase: 
      if ch not in di: 
       row = di.setdefault(ch, {}) 
       row.setdefault(ach, 0) 

    return di 

make_letter_pairs(test) 
+0

Est-ce tu as un regard sur 'Counter' en python? https://docs.python.org/2/library/collections.html#collections.Counter –

+0

Je n'ai pas. Est-ce la seule façon de le faire? Ou peut-il être fait en ajoutant sur ma boucle for? – user2951723

+0

combien de fois les paires de lettres se produisent? quelle serait la sortie correcte pour cette chaîne de test? – davedwards

Répondre

0

Counter du module collections est la voie à suivre à ce sujet:

Code:

from collections import Counter 
from string import ascii_lowercase 

def make_letter_pairs(text): 
    return Counter([t for t in [text[i:i+2] for i in range(len(text) - 1)] 
        if t[0] in ascii_lowercase and t[1] in ascii_lowercase]) 

test = 'how now, brown cow, ok?' 
print(make_letter_pairs(test)) 

Résultats:

Counter({'ow': 4, 'co': 1, 'no': 1, 'wn': 1, 'ho': 1, 'br': 1, 'ok': 1, 'ro': 1})