2016-12-14 3 views
0

J'ai un dictionnaire qui contient des entrées avec une multitude de clés et de valeurs différentes.Python - Créer des paires de valeurs clés à partir de plusieurs clés et valeurs symboliques

Certaines chaînes de plusieurs jetons délimitées par des espaces, certaines chaînes de jetons uniques sans espace.

Certaines ligne exactement, les clés avec un jeton, les valeurs avec un jeton:

"'Apl'": "'Apple'", 

Certains ont des clés de jeton unique et de multiples valeurs de jeton:

"'Blpepr'": "'Bell Pepper'", 

Certaines ont des touches de jeton unique et multiple valeurs de jeton:

"'Grn Bn'": "'Greenbean'", 

et d'autres ont plusieurs clés de jeton et plusieurs des valeurs symboliques (pas toujours le même numéro sur les deux côtés!):

"'Swt Ptto'": "'Sweet Potato'", 

Je suis en train de créer un dictionnaire qui affecte la clé: des paires de valeurs aussi près que possible de leurs côtés correspondants, de telle sorte qu'au moins je peux obtenir :

"'Apl'": "'Apple'", 
"'Swt'": "'Sweet'", 
"'Ptto'": "'Potato'", 

J'ai pris en compte les clés et valeurs avec nombre de jetons qui ne correspondent pas à être une cause perdue, car il est difficilement possible de déterminer où un jeton commence et se termine sans espace. Mais au moins avec ceux qui sont délimités dans l'espace, nous savons où les jetons commencent et se terminent, donc j'aimerais que le résultat soit similaire à ce qui précède.

Pour récupérer uniquement les clés avec des espaces, je l'ai fait ce qui suit à mon dictionnaire:

for key, value in dictionary1.items(): 
    if " " in key and value: 
     print(key + ":" + value) 

Toutes les idées?

+0

Vous avez pris probablement la partie * assigne la clé: des paires de valeurs aussi étroitement * très légèrement. Afin de former votre système pour identifier la proximité par son propre, vous devez faire un réseau de neurones avec des données d'entraînement. L'approche facile mais moins précise (que je pense que vous voulez) sera de vérifier le nombre d'occurrences de chaque personnage dans l'ordre et de cartographier la valeur avec le nombre maximum –

+0

Je pense que vous devriez considérer un algorithme de proximité de mot. Jetez un oeil à [une implémentation de réponse] (http://stackoverflow.com/a/33389155/835591) – thalesmello

Répondre

0

Vous pouvez utiliser .split() au lieu de la façon dont vous êtes actuellement la vérification des espaces:

for x in old_dict: 
    for i in range(0,2): 
     key = x.split()[i] 
     value = old_dict[x][0].split()[i] 
     new_dict[key] = value