Python:迭代字典的子集

时间:2013-08-14 18:58:54

标签: python dictionary iterator generator

我想迭代一个字典的子集来查找子集中的最小值。我可以使用生成器表达式来获取值:

>>> 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一样,但在这种情况下我无法看到如何应用它。

2 个答案:

答案 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