-1
votes

Dictionnaire de sortie où chaque élément est le caractère d'une chaîne avec un index

UPD: insertion à from collections import OrderedDict dans l'une de mes cellules de code a aidé

Je veux créer un programme qui accepte une chaîne, puis génère un dictionnaire où chaque élément est le caractère de cette chaîne avec un index.

Entrée: hello

Sortie {'h': 1, 'e': 2, 'l': 3, 'l': 4, 'o': 5}

J'ai trouvé plusieurs façons de créer ce type de dictionnaire. Cependant, dans tous les cas, j'ai la sortie suivante avec l'entrée mentionnée ci-dessus: {'e': 2, 'h': 1, 'l': 4, 'o': 5}

#solution 1
s = str(input())
dic = {}
for index, symb in enumerate(s, 1):
  dic[symb]=index
dic

#soultion 2
s = input()
d4 = {}
d4 = dict(zip(s,range(1,len(s)+1)))
d4

Quel peut être un problème ici? J'apprécierai toute aide. Merci d'avance.

PS pour le codage J'utilise Google Collab


4 commentaires

{'h': 1, 'e': 2, 'l': 3, 'l': 4, 'o': 5} n'est pas correct. Vous ne pouvez pas avoir de doublons dans les clés dict ('l' dans votre cas)


Les dictionnaires ne sont pas non plus classés, vous ne verrez donc pas les lettres dans l'ordre d'itération de la chaîne


@OneCricketeer Voir stackoverflow.com/questions/39980323/...


@Barmar Les vieilles habitudes meurent dur: /


3 Réponses :


1
votes

Les dictionnaires n'autorisent qu'une seule valeur par clé, il n'y aura donc pas deux valeurs pour la clé l , peu importe vos efforts. De plus, les dictionnaires ne sont pas classés, de sorte que les éléments n'apparaissent pas dans l'ordre dans lequel ils ont été insérés.


0 commentaires

0
votes

Comme @IoaTzimas le souligne correctement dans les commentaires, c'est que vous avez un malentendu fondamental sur le fonctionnement des touches dict . dict clés dict doivent être uniques (pensez à une clé interne) car la clé correspond à la valeur.


0 commentaires

1
votes
    Simple and Easy:-
    v_str='hello'
    class Dictlist(dict):
    def __setitem__(self, key, value):
        try:
            self[key]
        except KeyError:
            super(Dictlist, self).__setitem__(key, [])
        self[key].append(value)

p_dict=Dictlist()
for i, j in enumerate(v_str):
    p_dict[j]=i
print(p_dict)

# output:-{'h': [0], 'e': [1], 'l': [2, 3], 'o': [4]}

3 commentaires

Votre solution aurait les mêmes résultats que l'OP obtenait à l'origine.


Le dictionnaire n'a pas de clés en double :) L'ajout d'une autre réponse peut être utile


Je n'ai pas remarqué que vous les ajoutiez dans des listes, désolé!