2013-02-08 14 views
2

使用Python,我已經創建了一個由元組索引列表:我是否需要傳遞元組的所有值來索引字典?

return values[(a, b)] 

不過,有時候我想在(a, _)通過,我不在乎什麼b值和接收的列表所有可能的指數。

如:

values[(dog, _)] => returns [(dog, Mike), (dog, Sam), (dog, Edward)] 

這是可能在Python?

回答

2

您必須使用鍵的確切值來索引字典。

要找到多個密鑰,您需要循環他們:

[k for k in my_dict if k[0] == dog] 
+0

有什麼方法我可以做我的部分查找(也許不是使用字典)? – sdasdadas

+0

你是什麼意思的「偏」查找?這個答案查看元組鍵中的第一個值。 – monkut

+1

@monkut從我的評論開始編輯。 – sdasdadas

1

如果你有一個元組列表,那麼你可以簡單地創建從數組列表字典和利用的第一個元素作爲字典鍵像這樣:

>>> import collections 
>>> l = [('a', 'foo'), ('a', 'bar'), ('b', 'hello')] 
>>> d = collections.defaultdict(list) 
>>> for k, v in l: 
... d[k].append(v) 
... 
>>> d 
defaultdict(<type 'list'>, {'a': ['foo', 'bar'], 'b': ['hello']}) 
>>> d['a'] 
['foo', 'bar'] 
1

你不能用元組鍵索引字典。您必須使用相同的密鑰來提取您用來插入它的數據。

但是,另一種方法是使用嵌套字典。也就是說,不是索引一個元組(values[key1,key2]),而是索引兩次values[key1][key2]。如果你只提供第一個鍵,你會得到一個包含數據的內部字典。

下面是一個例子:

>>> d = {1: {1: 2, 2: 3, 3: 4}, 2: {2: 1, 3: 2, 4: 3}} 
>>> d[1][1] 
2 
>>> d[1] 
{1: 2, 2: 3, 3: 4} 

如果你只是想在內部字典的一個值,你可以使用values方法是:

>>> d[1].values() 
dict_values([2, 3, 4]) 

在Python 3,dict.values回報一個「視圖」對象,它是可迭代的。如果你需要一個真正的名單,只是包裝列表構造的values調用(只是知道該值的順序是任意):

>>> list(d[1].values()) 
[2, 3, 4] 
相關問題