Im Moment habe ich ein Wörterbuch wie folgt:Der beste Weg, um ein Wörterbuch mit einer Liste als Werte umzukehren?
app_dict = {test1 : [[u'app-1', u'app-2', u'app-3', u'app-4']]}
Ich habe eine Funktion, die das Wörterbuch umkehrt (die mit einem anderen Wörterbuch zu arbeiten bewiesen ist).
def reverse_dictionary(self, app_dict):
""" In order to search by value, reversing the dictionary """
return dict((v,k) for k in app_dict for v in app_dict[k])
Ich erhalte eine Fehlermeldung, wenn ich wie folgt vorgehen:
data = reverse_dictionary(app_dict)
print data
ERROR:
return dict((v,k) for k in app_dict for v in app_dict[k])
TypeError: unhashable type: 'list'
Ich bin nicht sicher, aber ich denke, die Frage ist, wie mit meinem Wörterbuch strukturiert ist, ich bin nicht sicher, warum es sind doppelte Klammern auf meiner Liste, und ich kann nicht scheinen, sie zu entfernen. Wie kann ich die Funktion reverse_dictionary so ändern, dass sie mit app_dict funktioniert?
EDIT:
new_dict = collections.defaultdict(list)
app_dict = collections.defaultdict(list)
#at this point, we have filled app_dict with data (cannot paste here)
for o, q in app_dict.items():
if q[0]:
new_dict[o].append(q[0])
Beachten Sie, dass, wenn ich new_dict an dieser Stelle mein Wörterbuch Werte zeigen im folgenden Format (mit Doppel Klammern) drucken: [[u'app-1' , u'app -2' , u'app-3' , u'app-4' ]]
Wenn ich die append Linie zu ändern: new_dict [o] .append (q [0] [0]) Was ich nehme an, dass die äußeren Klammern entfernt werden, stattdessen fügt es nur den ersten Wert in der Liste hinzu:
[u'app-1']
Ich glaube, das ist das Problem, das ich habe, ist nicht in der Lage, die äußeren Klammern erfolgreich von der Liste zu entfernen.
Hinweis: Die doppelten eckige Klammern sind eine Liste in einer anderen Liste – Izkata
Sehen Sie bitte meine aktualisiert Post – david
Ich weiß, das ist die Frage, aber ich bin nicht sicher, wie es zu korrigieren. – david