2016-11-26 3 views
0

Извините за вопрос об этом новичке.python структура данных: карта <строка, вектор <int>>

В C++, я могу иметь что-то вроде этого:

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

Дело в том, что я хочу построить его с mathplot. Каждый вектор будет сортироваться в соответствии со строковым значением «A1», «B3» и т. Д.

Можно ли реализовать что-то подобное в python? Обратите внимание, что мне придется рисовать с помощью mathplot. Поэтому доступ к вектору должен быть очень простым.

ответ

1

В Python эквивалент хэшмапа равен Dict (фактически, большинство реализаций Dict являются хэшмапами). Чтобы обеспечить упорядочение во всех реализациях, вы захотите использовать OrderedDict. A List эквивалентен вектору. Поэтому, вы хотите, OrderedDictLists.

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) 

Это будет печатать:

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

Вы также можете добавить дополнительные ключи, содержащие списки, как это:

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

Вам будет нужно пересортируйте OrderedDict.

Небольшая заметка: Dicts в Python не заказываются; они заказываются в очень новых версиях CPython 3, но это детализация реализации. Поэтому OrderedDict является наиболее применимой структурой данных, чтобы обеспечить переносимость вашего кода. Я упоминаю об этом, потому что многие люди очень взволнованы этой особенностью CPython, но это не гарантировано для работы повсюду.

1

Используйте Dict:

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

Обратите внимание, что вам нужно, чтобы вставить key первый в словаре, в противном случае было бы показать KeyError. Если вы хотите добавить новую key, пусть "A2" здесь, просто сделать:

m["A2"] = [] 

Для сортировки словаря в соответствии с его ключами, используйте OrderedDict: больше

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

Одна вещь, только не- изменяемые элементы, такие как строки, tuples, int и т. д., разрешены как keys в словаре python, у вас не может быть словаря с list, как [1,2,3] в качестве одного из ключей.

Смежные вопросы