2014-12-01 63 views
2

我有一本字典我想找到最小的關鍵,其中值[1]等於一個指定的字符串。Python字典 - 查找最小的關鍵,其中值等於

somedict = {'1': ['110', 'A'], '3': ['1', 'A'], '2': ['3', 'B'], '4': ['1', 'B']} 
mindict = min(somedict.iteritems(), key=itemgetter(0)) 

這給了我('1', ['110', 'A'])

我想通過尋找最小鍵,其中值是「B」

給我結果('2', ['3', 'B'])

怎麼會去進一步過濾此對這個?

回答

4

使用發電機表達第一過濾自己的項目:

min((i for i in somedict.iteritems() if i[1][-1] == 'B'), key=itemgetter(0)) 

發電機表達從somedict.iteritems()其中在值的最後一個條目是等於'B'產生元件。

請注意,這裏有一個風險,沒有項目匹配您的過濾器!如果情況確實如此,請確保在傳遞空序列時捕獲由min()引發的ValueError。如果您使用Python 3.4或更新版本,您可以指定這種情況下,要返回默認:

min((i for i in somedict.iteritems() if i[1][-1] == 'B'), 
    key=itemgetter(0), default=()) 

如果沒有項目有其價值的最後一個條目'B'這將返回一個空的元組。

演示:

>>> from operator import itemgetter 
>>> somedict = {'1': ['110', 'A'], '3': ['1', 'A'], '2': ['3', 'B'], '4': ['1', 'B']} 
>>> min((i for i in somedict.iteritems() if i[1][-1] == 'B'), key=itemgetter(0)) 
('2', ['3', 'B']) 
+0

完美。也謝謝你的解釋。 – NorthSide 2014-12-01 16:14:29

+0

如果沒有在這種情況下指定密鑰,您的代碼是否也可以工作? – nbro 2015-09-05 13:59:27

+0

@Axl:你的意思是'鍵'功能?在這種情況下(字典密鑰是唯一的),它確實可以完全省略以給出完全相同的結果。 – 2015-09-05 14:12:45

相關問題