2013-08-28 34 views
1

所以我有一個字典,它包含與一個詞匹配的數字。 我希望能夠根據用戶輸入的內容訪問字典的一部分。如何在python中訪問字典的一部分?

我該怎麼做才能讓用戶輸入一個數字,例如: 「2」,程序從字典中選擇匹配「2」的項目並打印出來?或者如果用戶輸入「氫」(詞典中的一個詞),它需要打印其相應的數字(「1」)。

在此先感謝

+0

什麼是你的詞典是什麼樣子? –

+2

將來有助於向我們展示您試圖解決問題的方法 – Greg

+0

您可以使用以下解決方案之一或使用[bidict](https://pypi.python.org/pypi/bidict) – Abhijit

回答

0

假設你的字典裏是這樣的(因爲你說號碼元素):

elements = {'2': 'Hydrogen', '8': 'Oxygen'} 

你可以有這樣的一段代碼:

user_input = '2' 
for key,value in elements.items(): 
    if user_input == key: 
     print value 
    if user_input == value: 
     print key 

您可以將循環轉換爲方法:

def search_dictionary(user_input, haystack): 
    for key,value in haystack.items(): 
     if user_input == key: 
      return value 
     if user_input == value: 
      return key 

然後使用它是這樣的:

user_input = raw_input('Please enter your search item: ') 
elements = {'2': 'Hydrogen', '8': 'Oxygen'} 
result = search_dictionary(user_input, elements) 
if result: 
    print("The result of your search is {0}".format(result)) 
else: 
    print("Your search for {0} returned no results".format(user_input)) 
+0

請注意,這在'O(N)'時間運行。 –

+0

我不認爲這對OP來說真的很重要:) –

0

製作兩點字典:

dict1 = { 
    1: "baz", 
    2: "bar", 
    ... 
} 

dict2 = { 
    "hydrogen": 1, 
    "helium": 2, 
    ... 
} 

input_ = raw_input("pick something: ") 
try: 
    print dict1[int(input_)] 
except ValueError: 
    print dict1[dict2[input_]] 
except KeyError: 
    print "Your desired key does not exist!" 
1

您可以創建以下兩種類型的字典一個映射元素的原子序數和一個原子序數映射到的元素。這將在O(1)時間內運行。

>>> ele2atm = {'hydrogen':'2', 'oxygen':'8', 'carbon':'7'} 
>>> atm2ele = {k:v for v, k in ele2atm.items()} 
def get_value(key): 
    try: 
     return ele2atm[key] 
    except KeyError: 
     return atm2ele[key] 


>>> get_value('8') 
'oxygen' 
>>> get_value('carbon') 
'7' 

或使用bidict包允許鍵和值之間的一對一映射。

例子:

>>> husbands2wives = bidict({'john': 'jackie'}) 
>>> husbands2wives['john'] # the forward mapping is just like with dict 
'jackie' 
>>> husbands2wives[:'jackie'] # use slice for the inverse mapping 
'john'