Извините, что задали этот вопрос новичку.
В 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?
Обратите внимание, что мне придется строить сюжет с помощью математического плана. Таким образом, доступ к вектору должен быть очень простым.
В 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, но она не гарантирована, чтобы работать везде.
Использовать 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]
как один из ключей.