我想迭代一个字典的子集来查找子集中的最小值。我可以使用生成器表达式来获取值:
>>> S = {'a', 'c'}
>>> D = {'a': 2, 'b': 0, 'c': 1, 'd': 3}
>>> min(D[k] for k in S)
1
要获取相关的密钥,我想这是可能的:
>>> subset_min = min(D[k] for k in S)
>>> [k for k, v in D.iteritems() if v == subset_min]
['c']
但肯定有一种方法不需要再次搜索字典?我希望min(D, key=D.get)
之类的内容与here一样,但在这种情况下我无法看到如何应用它。
答案 0 :(得分:5)
min(S, key=D.get)
非常简单。
答案 1 :(得分:1)
min_val, min_key = min((D[k], k) for k in S)
这将为您提供与最小值相关联的键,但它不会告诉您是否有多个此类键。
或者,您可以先找到密钥,然后访问相关的值:
min_key = min(S, key=D.get)
min_val = D[min_key]
如果您想收集与D
相关联的subset_min
中的所有密钥,那么您将在发布的时间内迭代所有D
。