2016-11-26 74 views
0

對不起,問這個新手問題。蟒數據結構:地圖<串,向量<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繪製。所以訪問這個向量應該很容易。

回答

1

在Python中,hashmap的等價物是Dict(實際上,大多數Dict的實現都是hashmaps)。爲確保跨實現的排序,您需要使用OrderedDict。 A List相當於一個向量。因此,你想要的是Lists一個OrderedDict

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

A小調注: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])) 

一件事,只有非在Python字典中允許使用字符串,元組,int等可變項目作爲keys,因此您不能將list這樣的字典作爲[1,2,3]作爲其中一個鍵。

相關問題