2012-01-03 163 views
0

我使用的字典,如下所示:檢索關鍵碼和值從字典

streetno={ 
    "1":"Sachin Tendulkar", 
    "2":"Sehawag", 
    "3":"Dravid", 
    "4":"Dhoni", 
    "5":"Kohli" 
}  

在此之後我要求用戶爲I/P。然後,取決於用戶輸入,我想從字典中檢索鍵或值。我該如何實現這個?我可以使用哪種方法來實現這個?

+2

能否請有資格你的要求?在什麼情況下你想要價值,以及在什麼情況下你想要鑰匙? – 2012-01-03 18:38:32

+2

請舉例說明你想做什麼。 – robert 2012-01-03 18:39:02

+0

如果用戶輸入整數,那麼我想檢索相應的字符串值。如果用戶輸入字符串值,我想要相應的鍵。 – 2012-01-03 18:42:27

回答

2

我可能會誤解這一點,但它看起來像你可能會要求用戶給你一個關鍵或價值。如果他們給你一個密鑰,你想返回的價值,如果他們給你一個值,你想要返回的密鑰。

如果這是你在找什麼,要做到這一點最簡單的方法是將條目添加到與價值和交換密鑰字典,例如:

streetno={"1":"Sachin Tendulkar","2":"Sehawag","3":"Dravid","4":"Dhoni","5":"Kohli"} 
streetno.update([(v, k) for k, v in streetno.items()]) 

這將導致以下詞典:

>>> pprint(streetno) 
{'1': 'Sachin Tendulkar', 
'2': 'Sehawag', 
'3': 'Dravid', 
'4': 'Dhoni', 
'5': 'Kohli', 
'Dhoni': '4', 
'Dravid': '3', 
'Kohli': '5', 
'Sachin Tendulkar': '1', 
'Sehawag': '2'} 

有了這個,你可以得到輸入和查找在詞典中的值沒有任何額外的檢查:

key = raw_input("Enter name or number (i/p):") 
result = streetno.get(key) 

如果您使用的是Python 3.x,請將raw_input()替換爲input()

-1

檢查這個網站的文檔中的「字典」部分:http://docs.python.org/tutorial/datastructures.html

streetno.keys()主罰鍵,您可以遍歷鍵來獲取值:

僞代碼:

 

     foreach key in streetno.keys() 
      print "key: ", key, ", value: ", streetno[ key ] 

+0

這並不回答這個問題......它只是打印每個鍵值對。 – Makoto 2012-01-03 19:01:02

+0

這篇文章的目的是閱讀有關字典的文檔。我假設讀者在閱讀文檔後瞭解Pyhton中的字典是如何工作的! – boto 2012-01-03 19:10:53

0

您可以創建一個輔助字典與反向映射:

In [4]: dict((v,k) for k,v in streetno.items()) 
Out[4]: 
{'Dhoni': '4', 
'Dravid': '3', 
'Kohli': '5', 
'Sachin Tendulkar': '1', 
'Sehawag': '2'} 

一旦您知道需要映射哪種方式,您可以使用原始字典或輔助字典進行查找。

+1

請注意'iteritems()'自Python 2.7以來已被棄用,並將在Python 3.x中消失 – moooeeeep 2012-01-03 18:54:16

0

如果用戶輸入「整數」,則可以顯式索引字典(即streetno[value])。你的密鑰看起來像是字符串,所以你可以不必將它們轉換爲整數或做任何事情來解決它可能是字符串或整數的問題。如果你的鑰匙是整數,那麼你將不得不做一些鑄造和折磨 - 我將這些作爲鍛鍊留給你。至於另一種方式,如果你想創建字典的反向映射(我認爲你是這樣做的),那麼你最好看一下this SO question and answer。您必須爲其創建單獨的字典,並使用該方法將鍵值向後映射。

0

讓你開始一個小的代碼示例...

streetno = 
    { 
    "1":"Sachin Tendulkar", 
    "2":"Sehawag", 
    "3":"Dravid", 
    "4":"Dhoni", 
    "5":"Kohli" 
    } 

input=raw_input() 
try: 
    print streetno[input] 
except KeyError: 
    print [k for k, v in streetno.items() if v == input][0]