2017-10-07 5 views
1

Ich versuche, ein Verständnis zu schreiben, dass gegeben zwei Wörterbücher (f, g), ein Wörterbuch, dessen Schlüssel ist der Schlüssel von f, und dessen Wert ist der entsprechende Schlüssel Wert von f des Wertes von g. Zum Beispiel gegeben:Zugriff String aus Wörterbuch Wert in Python

f = {0: 'a', 1: 'b'} 
g = {'a': 'apple', 'b': 'banana'} 
my_function_composition(f, g) #returns {0: 'apple', 1: 'banana'} 

Mein Verständnis für einige nur deshalb gibt ein Zeichen der Zeichenfolge

#output: {0: 'e', 1: 'a'} 

Hier ist meine Funktion:

def my_function_composition(f, g): 
    return {key: value for key in f for value in g[f[key]]} 

Warum Python zurückkehrt, was scheint das letzte Zeichen der Wertzeichenfolge und nicht die gesamte Zeichenfolge sein?

+0

Beachten Sie, wie es das ist * letzte Zeichen *, und darüber nachdenken, was 'für Wert in g [f [key]]' Mitteln. – jonrsharpe

Antwort

2

Sie können es wie folgt tun:

def my_function_composition(f, g): 
    return {key: g[value] for key, value in f.items()} 

sicherer sein Sie g.get(value, 0) im Fall verwenden können g nicht, dass die Schlüssel haben, und Sie wollen einen Standardwert wie 0.

Wenn Sie nur die f Werte benötigen, die in g Wörterbuch sind, können Sie zusätzliche Überprüfung für die value hinzufügen.

def my_function_composition(f, g): 
    return {key: g[value] for key, value in f.items() if value in g} 
+0

habe ich nicht gesehen bevor ich meine Lösung gepostet habe –

0
def my_function_composition(f, g): 
    return {key1: value2 for key1, value1 in f for key2, value2 in g if value1==key2} 
0

{key : g.get(f[key], None) for key in f} Kompatibel mit Python 3 und 2

Verwandte Themen