gpt4 book ai didi

python - 从字典的子集中找到字典中最小值的键的最有效方法

转载 作者:行者123 更新时间:2023-11-28 21:56:23 24 4
gpt4 key购买 nike

给定一个列表:

o = [1,2,4,6]

还有一本字典:

f = {1:10, 2:5, 3:1, 4:3, 5:7, 6:9}

找到 f 中与 f 中最低值关联的键的最有效方法是什么,其中该键也是列表 o 的成员?

使用上面的列表 (o) 和字典 (f),我会寻找键 4,而键 3 与值 1 和更低的值关联,3 不是列表 o 的成员。

目前我正在创建要检查的 key 对子集的字典,然后使用 min 获取值:

f_temp = dict((x,f[x]) for x in o)
current = min(f_temp, key=f_temp.get)

这确实有效,但创建新字典似乎效率低下。

此处使用 python 2.6,因此使用字典理解的 dict 语法。

最佳答案

您可以使用 dictionary view使用设置操作仅从输入序列中选择键:

min(f.viewkeys() & o, key=f.get)

在 Python 3 中,您需要使用的是:

min(f.keys() & o, key=f.get)

因为 dict.keys() 方法现在返回字典 View 。

或者,您可以使用一个键函数来排除您不想包含的键:

set_o = set(o)
min(f, key=lambda k: f[k] if k in set_o else float('inf'))

我在这里使用集合来提高成员资格测试的效率。 float('inf')(正无穷大)保证始终测试大于任何其他值。

演示:

>>> o = [1, 2, 4, 6]
>>> f = {1: 10, 2: 5, 3: 1, 4: 3, 5: 7, 6: 9}
>>> min(f.viewkeys() & o, key=f.get)
4
>>> set_o = set(o)
>>> min(f, key=lambda k: f[k] if k in set_o else float('inf'))
4

关于python - 从字典的子集中找到字典中最小值的键的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21584601/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com