структура данных python: map & lt; string, vector & lt; int & gt; & gt;

Извините, что задали этот вопрос новичку.

В C ++ у меня может быть что-то вроде этого:

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

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

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

0

Решение

В Python эквивалентом hashmap является Dict (на самом деле, большая часть реализации Dict это хешмапы). Чтобы обеспечить упорядочение по всем реализациям, вы захотите использовать OrderedDict, List эквивалентно вектору. Поэтому то, что вы хотите, это OrderedDict из 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)

Это напечатает:

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]))

Еще одна вещь, только неизменяемые элементы, такие как строки, кортежи, int и т. Д., Разрешены как keys в словаре Python вы не можете иметь словарь с list лайк [1,2,3] как один из ключей.

1

По вопросам рекламы [email protected]