2016-12-01 8 views
0

私は基本的にpython辞書のように動作するデータ構造を作っていますが、3つのキーと1つの出力を持っています。アルゴリズムpythonデータ構造

例えば、私はnXnマトリックスと、おそらくそれに付随するいくつかのタグを持っています。

だから私の擬似コードは次のように動作する:そのために働くでしょうPythonでのデータ構造には、どのような種類

my_dict[(2, 2, NN)] = 1.0 
my_dict[(2, 4, NN)] = .12 
my_dict[(0, 1, VP)] = .14 
my_dict[(1, 1, VB)] = 1.0 

? (ことmy_dictどうあるべきか)

+0

これはどのように実装するのですか?あなたは、キーをハッシュし、次にハッシュマップを使うことができます。 – Carcigenicate

+0

numpy配列にアクセスするのと同じように見える –

+0

辞書キーは、任意のハッシュ可能オブジェクトにすることができます。タプルの3つの項目もハッシュ可能である限り、3つの 'キー'を含むタプルは受け入れ可能なキーです。 –

答えて

3

Python dictは、tuplesをキーとして格納できますが、ハッシュ可能でなければならないという条件があります。

タプル内の要素がハッシュ可能な場合、tupleはハッシュ可能です。

したがって、3つのキーのすべてがハッシュ可能な場合、別のデータ構造を作成する必要はなく、dictを使用することができます。

>>> my_dict = {} 
>>> my_dict[(2, 2, 'NN')] = 1.0 
>>> my_dict[(2, 4, 'NN')] = .12 
>>> my_dict[(0, 1, 'VP')] = .14 
>>> my_dict[(1, 1, 'VB')] = 1.0 
>>> my_dict 
{(0, 1, 'VP'): 0.14, (2, 4, 'NN'): 0.12, (2, 2, 'NN'): 1.0, (1, 1, 'VB'): 1.0} 
>>> 
1
from collections import defaultdict 
p = defaultdict(); 

p[(2,2,'A')] = 1.0 

p[(2,4,'NN')] = 1.5 

print p 
>> defaultdict(None, {(2, 4, 'NN'): 1.5, (2, 2, 'A'): 1.0}) 

これは辞書オブジェクトのための「鍵」として(唯一の基準は、キーニーズはハッシュ可能であることをということで、あるいは別のfrozen_dict)あなたはタプルを保持するのに役立ちます素晴らしいライブラリです。

In [8]:p.has_key((2, 4, 'NN')) 
Out[8]: True 
In [11]: p.values() 
Out[11]: [1.5, 1.0] 

辞書のためにすべてのあなたの鍵を一覧表示するには:あなたは要素を確認したい場合は

さて、

In [13]: p.keys() 
Out[13]: [(2, 4, 'NN'), (2, 2, 'A')] 

あなたはそれを気に入るはず!

関連する問題