2015-11-04 96 views
0

說我有下面的代碼,使一個字典:Python的打印單個鍵/值對

x = 0 
myHash = {} 
name = ["Max","Fred","Alice","Bobby"] 

while x <= 3: 
    myHash[name[x]] = x 
    x += 1 

l = sorted(myHash.values(), reverse=True) 
largestNum = l[0] 

# print myHash.getKeyFromValue(largestNum) 

是否可以很容易地獲取配對我largestNum變量的關鍵不通過循環整個字典?類似於底部行中的僞代碼。

注意:我不想從密鑰中獲取值。我想要的是相反的。

+1

另一種方式來獲得'myHash'字典:'{i:j for j,i in enumerate(name)}' –

+0

爲了讓您的問題更清楚:您是否有興趣從最大的價值中專門找到鑰匙?或者你有興趣一般從任意值中找到一個密鑰? –

+0

從最大價值中獲得關鍵解決了我目前的問題。但是,知道從任意值中找出密鑰的一般方法是很好的。 – Sam

回答

1

請不要僅排序values。將itemsvalues排序,然後免費領取鑰匙。

from operator import itemgetter 

l = sorted(myHash.items(), key=itemgetter(1), reverse=True) 
largestKey, largestNum = l[0] 

注意:如果你只是想最大的價值,排序結果的不休息,你可以節省一些工作,並跳過完全sorted工作(減少工作從O(n log n)O(n)):

largestKey, largestNum = max(myHash.items(), key=itemgetter(1)) 

用於反相dict一般情況下,如果值是唯一的,是微不足道的創建一個映射逆轉:

invert_dict = {v: k for k, v in orig_dict.items()} 

如果值不是唯一的,你想找到對應於具有單個查找一個值的所有鍵,你會反轉爲多字典:

from collections import defaultdict 

invert_dict = defaultdict(set) 
for k, v in orig_dict.items(): 
    invert_dict[v].add(k) 
# Optionally convert back to regular dict to avoid lookup auto-vivification in the future: 
# invert_dict = dict(invert_dict) 
+0

注意:如果你在Python 2.7中,使用'viewitems'和'viewvalues'而不是'items'和'values'來避免產生中間'list'。這也意味着'2to3'轉換器將直接轉換使用(因爲'viewitems'和'viewvalues'直接等價於'items'和'values'的Py3版本)。 'keys' /'viewkeys'也一樣,但通常,如果你只是迭代'dict'鍵,直接迭代,根本沒有方法調用。 – ShadowRanger

+0

如果你沒有字典值的重複值,那麼你可以使用這種方法; ....... .....#從字典的值 .....查找最大值..... dictValue = {「a」:1,「b」:2,「c」:3} ValuesList = dictValue.values() ..... KeyList = dictValue.keys() ..... MaxValue = max(ValuesList) ..... YourReqKey = KeyList [ValuesList.index(MaxValue)] –