2016-08-12 6 views
1

整数インデックスを浮動小数点数のベクトルにマップするPythonの構造体が必要です。私のデータは次のようである:unordered_map <int、vector <float>> Pythonでこれに相当する

[0] = {1.0, 1.0, 1.0, 1.0} 
[1] = {0.5, 1.0} 

私は次のように定義/ /アクセスを追加するために、次のコードを使用し、C++でこれを書くとしたら:

これの同等の構造はである何
std::unordered_map<int, std::vector<float>> VertexWeights; 
VertexWeights[0].push_back(0.0f); 
vertexWeights[0].push_back(1.0f); 
vertexWeights[13].push_back(0.5f); 
std::cout <<vertexWeights[0][0]; 

Python?

答えて

1

dictionaryは - >

d = {} # Initialize empty dictionary. 
d[0] = [1.0, 1.0, 1.0, 1.0] # Place key 0 in d, and map this array to it. 
print d[0] 
d[1] = [0.5, 1.0] 
print d[1] 
>>> [1.0, 1.0, 1.0, 1.0] 
>>> [0.5, 1.0] 
print d[0][0] # std::cout <<vertexWeights[0][0]; 
>>> 1.0 
+0

でC + +キーがない場合、d [15]と言うと、自動的に作成されます。しかしPyhtonでは私はキーエラーを得る。これを克服する方法はありますか? – Cihan

+0

そうですね、C++とPythonはこの点で同じように動作します。私の答えを更新しました。 Pythonの辞書リテラルは、本質的に順序付けられていないマップです。 @Cihan – ospahiu

+1

@Cihan ['' '' collections.defaultdict(list) '' '(https://docs.python.org/3/library/collections.html#collections.defaultdict)を試してください。 – wwii

0

私はdictの整数をキーとして使用し、listをアイテムとして使用します。

m = dict() 
m[0] = list() 
m[0].append(1.0) 
m[0].append(0.5) 
m[13] = list() 
m[13].append(13.0) 

それは、このような辞書やリストについてはどのようにあまりにも多くのデータ

+1

{ (int) key : (list) value }があるはず 'M [13] =リスト()' M [13] .append(13.0) ''の前に。 – Shubham

+0

もちろん、あなたは正しいです – ChE

2

でない場合:

>>> d = {0: [1.0, 1.0, 1.0, 1.0], 1: [0.5, 1.0]} 
>>> d[0] 
[1.0, 1.0, 1.0, 1.0] 
>>> d[1] 
[0.5, 1.0] 
>>> 

キーが整数と関連する値可能リストとして保存することができます。 Dictionary in Pythonはハッシュマップであり、複雑さは償却されますO(1)。この形式の

関連する問題