我有一个词典我想找到值[1]等于指定字符串的最小键。
somedict = {'1': ['110', 'A'], '3': ['1', 'A'], '2': ['3', 'B'], '4': ['1', 'B']}
mindict = min(somedict.iteritems(), key=itemgetter(0) )
这给了我('1', ['110', 'A'])
我想通过找到值为'B'
的min键来进一步过滤给我结果('2', ['3', 'B'])
怎么会这样呢?
答案 0 :(得分:4)
首先使用生成器表达式过滤项目:
min((i for i in somedict.iteritems() if i[1][-1] == 'B'), key=itemgetter(0))
生成器表达式从somedict.iteritems()
生成元素,其中值的最后一个条目等于'B'
。
请注意,此处存在与您的过滤器不匹配的项目的风险!如果可能是这种情况,请确保在传递空序列时捕获ValueError
引发的min()
。如果您使用的是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'])