2016-11-26 3 views
0

Entschuldigen Sie bitte, dass Sie sich nach dieser Newbie-Frage erkundigen.Python-Datenstruktur: map <string, vector <int>>

In C++ kann ich so etwas wie dieses:

map<string, vector<int>> m 
m["A1"].push_back(1); 
m["A1"].push_back(2); 
m["B3"].push_back(3); //etc 

Die Sache ist, dass ich es mit mathplot plotten will aus. Jeder Vektor sortiert nach seinem Zeichenfolgenwert "A1", "B3" usw.

Kann ich etwas Ähnliches in Python implementieren? Beachten Sie, dass ich mit Mathplot plotten muss. Der Zugriff auf den Vektor sollte also sehr einfach sein.

Antwort

1

In Python ist das Äquivalent einer hashmap ein Dict (tatsächlich sind die meisten Implementierungen von Dict hashmaps). Um die bestellungsübergreifende Implementierung zu gewährleisten, sollten Sie eine OrderedDict verwenden. A List entspricht einem Vektor. Was Sie also wollen, ist ein OrderedDict von Lists.

from collections import OrderedDict 

// Create the dictionary 
d = {'A1': [1, 2], 'B2': [2, 3]} 

// Order it by key 
m = OrderedDict(sorted(d.items(), key=lambda t: t[0])) 

// Example of appending to one of the lists 
m['A1'].append(3) 

print(m) 

Dies drucken:

m["B2"] = [2, 3, 5, 7] 

Sie werden dann die OrderedDict müssen neu sortieren:

OrderedDict([('A1', [1, 2, 3]), ('B2', [2, 3])]) 

Sie auch zusätzliche Tasten enthält Listen wie diese hinzufügen können.

Eine Nebennotiz: Dicts in Python sind nicht bestellt; Sie werden in sehr neuen Versionen von CPython 3 bestellt, aber das ist ein Implementierungsdetail. Daher ist die am besten geeignete Datenstruktur hier, um sicherzustellen, dass Ihr Code portabel ist. Ich erwähne dies, weil viele Leute von dieser Funktion von CPython begeistert sind, aber es ist nicht garantiert, dass sie überall funktioniert.

1

Verwenden Sie ein Dict:

m = {"A1" : [], "B3" : []} 
m["A1"].append(1) 
m["A1"].append(2) 
m["B3"].append(3) 

Beachten Sie, dass die key zuerst im Wörterbuch einfügen müssen, sonst wäre es KeyError zeigen. Wenn Sie einen neuen key hinzufügen wollen, nehme "A2" hier, tun einfach:

m["A2"] = [] 

das Wörterbuch entsprechend sortieren die Tasten, verwenden Sie einen OrderedDict:

m = OrderedDict(sorted(m.items(), key = lambda t : t[0])) 

Eine weitere Sache, nur nicht Veränderbare Elemente wie Strings, Tupel, Int usw. sind als keys in einem Python-Dictionary zulässig. Sie können kein Dictionary mit einem list wie [1,2,3] als einen der Schlüssel haben.

Verwandte Themen