2013-01-23 4 views
0

J'ai deux dictionnaires. Je dois faire correspondre les valeurs dans le premier aux clés dans le second et ensuite retourner la valeur trouvée dans le deuxième dictionnaire. Je suis venu avec ce à ce jour:python lien valeurs dictionnaire 1 à clés dictionnaire 2

d1 = {} 
with open ("file1.txt") as f: 
    for line in f: 
     (key,val) = line.split() 
     d[int(key)] = val 
d2 = {} 
with open("file2.txt") as f: 
    for line in f: 
     (key,val) = line.split() 
     d[int(key)] = val 

for item in d1.values(): 
    if d2.has_key(item): 
     print value.d2(item) 

Je continue à obtenir l'erreur « trop de valeurs pour décompresser » et à part cela, ferait effectivement mon script ce que je veux faire?

MISE À JOUR (Désolé je ne savais pas que je pouvais éditer ma question!): I mes deux fichiers texte, fichier1 mappe un mot à un système numérique, et fichier2 mappe le numéro à sa catégorie pertinente. Le résultat final devrait être que le mot de fichier1 est lié à sa catégorie qui se trouve dans le fichier2. Ceci est fait en liant d'abord le mot à un nombre puis en liant le nombre à une catégorie. Par exemple: Aanbidden (mot néerlandais)> 12> Cat. "affecter". Les lignes dans mon dossier ressemblent à ceci:

file1.txt:

aanbidden: 12 13 14 57 58 
leven : 15 
drinken: 23 56 
... 
(As you see each key can have one or more values) 

file2.txt:

12: affect 
13: posemo 
14: Posfeel 
15: Optim 
23: discrep 
56: money 
57: metaph 
58: religious 
... 
(In this file each key has only one value) 
+2

Sur quelle ligne avez-vous 'trop de valeurs à décompresser? Pouvez-vous poster le retraçage complet? (Le coupable le plus probable est que votre 'file1.txt' et' file2.txt' ont plus de deux éléments par ligne) –

+0

Je doute que cela fonctionne. vous imprimez 'valeur', mais je ne vois pas de valeur définie nulle part ... – mgilson

Répondre

1

Sur la base de vos commentaires, ce qui suit semble être ce que vous voulez:

d1 = {} 
with open ("file1.txt") as f: 
    for line in f: 
     (key,val) = line[:-1].split(": ") 
     d1[key] = val.split() 

d2 = {} 
with open("file2.txt") as f: 
    for line in f: 
     (key,val) = line[:-1].split(": ") 
     d2[key] = val 

for word, nums in d1.items(): 
    print word, "->", 
    for num in nums: 
     if d2.has_key(num): 
      print d2[num], 
    print 

Étant donné les fichiers que vous posté ci-dessus, il affiche les éléments suivants:

drinken -> discrep money 
leven -> Optim 
aanbidden -> affect posemo Posfeel metaph religious 
+0

Merci! Oui, les deux fichiers ont plus de deux éléments, cela explique. Dois-je utiliser des iteritems? – JohnDoe

+0

@JohnDoe: Non, cela n'a rien à voir avec ça. À quoi ressemble une ligne de votre fichier (combien d'éléments), et * quels * de ses éléments voulez-vous utiliser comme clés et valeurs? –

+0

@JohnDoe: Incidemment, vous pouvez [modifier] (http://meta.stackexchange.com/questions/21788/how-does-editing-work) des informations supplémentaires dans votre question initiale. Une bonne modification serait de montrer ce que vous avez sur une ligne de 'file1.txt' ou' file2.txt', et d'indiquer quelle partie de cette ligne vous voulez utiliser comme clé et quoi comme valeur. –

Questions connexes