python数据结构:map <string,vector <int =“”>&gt;

时间:2016-11-26 03:18:44

标签: python c++ dictionary vector jmathplot

很抱歉问这个新手问题。

在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绘图。因此访问矢量应该非常容易。

2 个答案:

答案 0 :(得分: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,你不能拥有{{1}的字典像list一样作为键之一。

答案 1 :(得分:1)

在Python中,hashmap的等价物是Dict(实际上,Dict的大部分实现都是散列图)。为了确保跨实现的排序,您将需要使用OrderedDictList等同于向量。因此,您想要的是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

一个小注:Python中的Dicts没有订购;它们恰好在CPython 3的新版本中订购,但这是一个实现细节。因此,OrderedDict是最适用的数据结构,以确保您的代码是可移植的。我之所以提到这一点,是因为很多人对CPython的这个功能感到非常兴奋,但并不能保证能够在任何地方工作。