Ich habe ein Wörterbuch, in dem Schlüssel und Werte ausgetauscht werden sollen. Zum Beispiel:

dic = {"indianapolis":"indiana", "columbus":"ohio", "jackson":"mississippi",
  "phoenix":"arizona"}

Die Ausgabe sollte sein:

{"indiana":"indianapolis", "ohio":"columbus", "mississippi":"jackson",
  "arizona":"phoenix"}

Hier ist, was ich versucht habe, aber die Einschränkungen sind, dass nur sorted(), split() Funktionen verwendet werden sollten und keine andere integrierte Funktion verwendet werden sollte (wie keys(), values(), items(), lambda). Ich bin mir nicht sicher, wie ich weiter vorgehen soll. Kann jemand helfen? Ich bin neu in Wörterbüchern.

def interchange(input_dict):
    temp = {}
    dic = input_dict
    for i in dict:
        temp[i[1]] = i[0]
    return temp_dic
3
Shraddha 8 Dez. 2013 im 20:03

4 Antworten

Beste Antwort

Es sollten nur die Funktionen .sorted(), .split() verwendet werden

Verwenden von sorted und eines Wörterbuchverständnisses:

>>> dic = {"indianapolis":"indiana", "columbus":"ohio", "jackson":"mississippi", "phoenix":"arizona"}
>>> {dic[k]:k for k in sorted(dic)}
{'ohio': 'columbus', 'mississippi': 'jackson', 'arizona': 'phoenix', 'indiana': 'indianapolis'}

sorted gibt die Schlüssel des Wörterbuchs in sortierter Reihenfolge zurück, obwohl die Reihenfolge des endgültigen Diktats willkürlich sein wird. Der obige Code entspricht:

>>> sorted(dic)
['columbus', 'indianapolis', 'jackson', 'phoenix']
>>> new_dic = {}
>>> for k in sorted(dic):
...     new_dic[dic[k]] = k
...     
>>> new_dic
{'ohio': 'columbus', 'mississippi': 'jackson', 'arizona': 'phoenix', 'indiana': 'indianapolis'}

Update:

def interchange(input_dict):
    return {input_dict[k]:k for k in sorted(input_dict)}
... 
>>> interchange(dic)
{'ohio': 'columbus', 'mississippi': 'jackson', 'arizona': 'phoenix', 'indiana': 'indianapolis'}
3
Ashwini Chaudhary 8 Dez. 2013 im 16:12

sehr einfach

tuple_list = zip(dic.values(),dic.keys())
Result = dict(tuple_list)

Erzeugt die erforderliche Ausgabe

{'arizona': 'phoenix',
 'indiana': 'indianapolis',
 'mississippi': 'jackson',
 'ohio': 'columbus'}

Bearbeiten Einzeilige Lösung

{ dic[Key]:Key for Key in list(dic) }
0
securecurve 8 Dez. 2013 im 16:55

Eine nette Option:

dic = {"indianapolis":"indiana", "columbus":"ohio", "jackson":"mississippi",
  "phoenix":"arizona"}

newDict = dict(zip(dic.values(),dic.keys()))

print newDict

Ausgabe:

{'ohio': 'columbus', 'mississippi': 'jackson', 'arizona': 'phoenix', 'indiana': 'indianapolis'}

Erläuterung:

zip() gibt eine Liste von Tupeln (Wörterbüchern) zurück, und die Parameter für zip werden in der Reihenfolge umgekehrt ...

Ohne Python-Methoden:

dic = {"indianapolis":"indiana", "columbus":"ohio", "jackson":"mississippi",
  "phoenix":"arizona"}

newDict = {}

for key, item in dic.iteritems():
    newDict.update({item: key})

print newDict

Ausgabe:

{'ohio': 'columbus', 'mississippi': 'jackson', 'arizona': 'phoenix', 'indiana': 'indianapolis'}
0
Kobi K 8 Dez. 2013 im 16:13

Diktat verstehen:

>>> dic = {"indianapolis":"indiana", "columbus":"ohio",
...        "jackson":"mississippi", "phoenix":"arizona"}
>>> {dic[key]: key for key in dic}
{'ohio': 'columbus', 'mississippi': 'jackson',
 'arizona': 'phoenix', 'indiana': 'indianapolis'}
1
falsetru 8 Dez. 2013 im 16:03