Itérer sur OrderedDict python
J'ai le texte suivant OrderedDict:
OrderedDict([('r', 1), ('s', 1), ('a', 1), ('n', 1), ('y', 1)])
Ce fait présente une fréquence d'une lettre dans un mot.
Dans la première étape, je prendrais les deux derniers éléments pour créer une union tuple comme cela;
pair1 = list.popitem()
pair2 = list.popitem()
merge_list = (pair1[0],pair2[0])
new_pair = {}
new_pair[merge_list] = str(pair1[1] + pair2[1])
list.update(new_pair);
Cela a créé pour moi qui suit OrderedList:
OrderedDict([('r', 1), ('s', 1), ('a', 1), (('y', 'n'), '2')])
Je voudrais maintenant, pour effectuer une itération sur les éléments, prenant à chaque fois le dernier de trois, et de décider de la diminution de la somme des valeurs de ce qui est l'objet de l'union.
Par exemple la liste ci-dessus va à son tour;
OrderedDict([('r', 1), (('s', 'a'), '2'), (('y', 'n'), '2')])
mais le dessus a été:
OrderedDict([ ('r', 1), ('s', 2), ('a', 1), (('y', 'n'), '2')])
Le résultat serait:
OrderedDict([('r', 1), ('s', 2), (('a','y', 'n'), '3')])
que je veux la gauche qui, à avoir la valeur la plus petite
J'ai essayé de le faire moi-même mais ne comprend pas comment effectuer une itération à partir de la fin au début sur une OrderedDict.
Comment puis-je le faire?
ÉDITÉ
Répondre au commentaire:
- Je obtenir un dictionnaire de fréquence d'une lettre en une phrase:
{ 's':1, 'a':1, 'n':1, 'y': 1}
et de la nécessité de créer un arbre de huffman.
par exemple:
((s,a),(n,y))
Je suis à l'aide de python 3.3
source d'informationauteur Dejell
Vous devez vous connecter pour publier un commentaire.
Exemple Simple
De sortie:
:
Ou:
Noter que, comme indiqué dans les commentaires par adsmithc'est probablement une instance d'un XY Problème et vous devriez revoir vos structures de données.
Cela dit, si vous avez besoin de ne fonctionner que sur trois derniers éléments, alors vous n'avez pas besoin d'effectuer une itération. Par exemple:
Puis d'avoir:
Produit:
Et de fusionner l'ensemble de la structure complètement, vous devez juste:
Qui donne:
Vous pouvez effectuer une itération à l'aide de
enumerate
etiteritems
: