2016-12-01 61 views
0

我正在做一個數據結構,基本上就像一個Python字典,但它有3個鍵和一個輸出。算法蟒蛇數據結構

例如,我有一個nXn矩陣和幾個標籤,可能與它一起使用。

所以我的僞代碼就像:

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 

會工作在Python什麼樣的數據結構是什麼? (我應該my_dict是)

+0

你問你如何實現這個?您可以散列密鑰,然後使用散列圖。 – Carcigenicate

+0

看起來像訪問一個numpy數組 –

+0

字典鍵可以是任何可哈希對象。包含3個'keys'的元組是一個可接受的鍵,只要元組中的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')] 

你會愛上它!