1

抱歉问这个新手问题。

在 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 进行绘图。所以访问向量应该很容易。

4

2 回答 2

2

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

还有一件事,像在 python 字典中一样,只允许不可变的项目,如字符串、元组、int 等,keys你不能将字典作为键之一。list[1,2,3]

于 2016-11-26T03:48:59.897 回答
1

在 Python 中,hashmap 的等价物是 a Dict(事实上,大多数实现Dict都是 hashmaps)。为确保跨实现排序,您将需要使用OrderedDict. AList等价于一个向量。因此,你想要的是一个OrderedDictof 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 的这个特性感到非常兴奋,但不能保证它在任何地方都能工作。

于 2016-11-26T03:42:33.107 回答