python数据结构:map<string, vector<int>>
python data structure: map<string, vector<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 进行绘图。所以访问向量应该很容易。
在Python中,hashmap的等价物是Dict
(事实上,大多数Dict
的实现都是hashmap)。为确保跨实现排序,您需要使用 OrderedDict
。 List
相当于一个向量。因此,你想要的是一个OrderedDict
of 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 的这个特性感到非常兴奋,但不能保证它在任何地方都有效。
使用 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 字典中,只有不可变的项目如字符串、元组、整数等被允许作为 keys
,你不能有一个带有list
喜欢 [1,2,3]
作为键之一。
很抱歉问这个新手问题。
在 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 进行绘图。所以访问向量应该很容易。
在Python中,hashmap的等价物是Dict
(事实上,大多数Dict
的实现都是hashmap)。为确保跨实现排序,您需要使用 OrderedDict
。 List
相当于一个向量。因此,你想要的是一个OrderedDict
of 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 的这个特性感到非常兴奋,但不能保证它在任何地方都有效。
使用 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 字典中,只有不可变的项目如字符串、元组、整数等被允许作为 keys
,你不能有一个带有list
喜欢 [1,2,3]
作为键之一。