0
votes

Échange d'éléments dans une liste en fonction de leur correspondance dans un dictionnaire

Très bien, j'essaye donc d'écrire une fonction qui prend une chaîne et un dictionnaire qui relie chaque lettre de l'alphabet à une autre lettre de l'alphabet. La fonction divise ensuite la chaîne en lettres individuelles, les échange contre leur paire dans le dictionnaire, puis remet le tout ensemble. Il est important de noter que dans mon dictionnaire, l'alphabet d'entrée correspond aux valeurs de la paire (clé, valeur) et j'essaie de passer à l'alphabet clé.

def substitutor(text,theDict):
    for n in list(text):
        n = [key  for (key, value) in theDict.items() if value == n]

Ce que j'ai essayé ici, c'est de prendre chaque lettre n dans la liste des lettres "liste (texte)" et de la redéfinir comme la clé de ma paire (clé, valeur) dans le dictionnaire. Je sais que je dois rendre quelque chose mais je ne sais pas quoi. La sortie doit être soit une liste équivalente à list (texte) mais avec les lettres permutées, soit mieux encore une seule chaîne combinant cette liste en une seule. Je suis super nouveau en python, donc il me manque peut-être quelque chose d'évident ici, j'aimerais beaucoup d'aide.


5 commentaires

s'il vous plaît poster un exemple d'entrée et de sortie


Cela n'a aucun sens d'attribuer à la variable d'itération.


Oh première remarque, pourquoi définissez-vous la variable index n avec une liste en 3ème ligne?


Vous n'avez pas besoin de convertir une chaîne en liste, vous pouvez utiliser pour n dans le texte:


Pourquoi ne pas créer deux dictionnaires, un pour chaque direction, pour ne pas avoir à rechercher theDict.items () ?


3 Réponses :


0
votes

Utilisation de str.translate ()

def substitutor(text,theDict):
    d = {ord(v): k for k, v in theDict.items()}
    return text.translate(d)


0 commentaires

1
votes

Inversez le dictionnaire, puis utilisez-le pour traduire les éléments de text.

def substitutor(text, theDict):
    rev_dict = {v: k for k, v in theDict.items()}
    return ''.join(rev_dict.get(c, '') for c in text)


0 commentaires

0
votes

Votre code est incorrect, en premier lieu, vous ne devriez pas définir l'index d'itération (n ici) avec autre chose, ** ce que vous pouvez faire est d'obtenir chaque élément de chaîne et de l'utiliser comme clé du dictionnaire pour l'obtenir Caractère crypté !! **

Pour l'exemple, j'ai mis un code d'une ligne pour vous, cela fonctionnera en conséquence de votre problème !!

def substitutor(text,theDict):
    encrypted_text = ''.join([ theDict.get(n) for n in list(text) if theDict.haskey(n) ])
    return encrypted_text


0 commentaires