2010-09-17 18 views
6
dict1=({"EMP$$1":1,"EMP$$2":2,"EMP$$3":3}) 

在字典中的關鍵模式如何檢查是否EMP使用python檢查在python

dict1.get("EMP##") ?? 
+0

這並不完全清楚你想要做什麼。你能改說你的問題嗎?提供樣本輸入和輸出將有所幫助。 – 2010-09-17 13:56:10

回答

19

這並不完全清楚你想要做什麼。

您可以通過在dict選擇鍵鍵循環使用the startswith() method

>>> for key in dict1: 
...  if key.startswith("EMP$$"): 
...   print "Found",key 
... 
Found EMP$$1 
Found EMP$$2 
Found EMP$$3 

您可以使用列表解析來獲取所有匹配的值:

>>> [value for key,value in dict1.items() if key.startswith("EMP$$")] 
[1, 2, 3] 

如果你只是想要知道是否有鑰匙匹配您可以使用the any() function

>>> any(key.startswith("EMP$$") for key in dict1) 
True 
+0

我曾嘗試過,因爲在你的第一個例子中,我放了一個else後,如果部分條件似乎是錯誤的... – Rajeev 2010-09-17 14:18:35

+1

我試過這種方法,它的工作原理是作者的意圖。添加一個else也適用於我。你遇到了什麼錯誤? – 2010-09-17 14:35:19

0

有沒有辦法來匹配字典鍵像這樣存在於字典。我建議你重新考慮這個問題的數據結構。如果這必須更加快速,你可以使用類似後綴樹的東西。

6

這種方法讓我覺得與字典的意圖相反。

字典是由散列鍵構成的,散列鍵具有與它們相關聯的值。這種結構的好處是它提供了非常快速的查找(按照O(1)的順序)。通過搜索關鍵字,你會否定這種好處。

我會建議重新組織你的字典。

dict1 = {"EMP$$": {"1": 1, "2": 2, "3": 3} } 

然後,找到「EMP $$」很簡單,只要

if "EMP$$" in dict1: 
    #etc... 
2

你需要很多更具體和你想要做什麼。但是,假設字典,你給:

dict1={"EMP$$1":1, "EMP$$2":2, "EMP$$3":3} 

如果你想知道,如果一個特定的鍵試圖請求它之前還是可以存在:

dict1.has_key('EMP$$1') 
True 

返回Truedict1有一個關鍵EMP$$1

你也可以忘記檢查鑰匙和依靠dict1.get()默認返回值:

dict1.get('EMP$$5',0) 
0 

返回0默認給出dict1沒有一個關鍵EMP$$5

你也可以使用一個'試/除非/結構捕獲並處理錯過鍵類似的方式:

try: 
    dict1['EMP$$5'] 
except KeyError, e: 
    # Code to deal w key error 
    print 'Trapped key error in dict1 looking for %s' % e 

其他的答案對這個問題也很大,但我們需要更多的信息是更確切。

+0

'.has_key'已棄用 – SilentGhost 2010-09-17 14:42:19

+0

SilentGhost是正確的。使用'dict'鍵而不是dict.has_key(鍵)。 http://docs.python.org/library/stdtypes.html#dict.has_key – 2010-09-17 14:49:21

+0

@SilentGhost - 謝謝,我會分階段那個。 – dtlussier 2010-09-17 16:28:59