gpt4 book ai didi

python - 如何根据字典值只打印一定范围内的字典键值?

转载 作者:行者123 更新时间:2023-11-28 20:55:27 24 4
gpt4 key购买 nike

假设我有一个以下格式的字典。

new_dict = {'worry': [23, 667, 1692, 1940], 'win': [96, 200, 286], 'work': [833, 1458]}

我只想根据 0 到 100 之间的值打印 key 键。

这种情况下的输出:

{'worry', 'win'}

我试过:

dict0100 = {k:v for (k,v) in new_dict.items() if new_dict.values(range(100))}

我收到错误,例如值只接受 1 个参数。

注意:在我的例子中,值的范围在 0 到 5000 之间。我只想要 0 到 100 之间的键值。

感谢任何帮助。

最佳答案

我会使用 any 进行范围检查。这是一个简洁的可重用生成器函数:

def get_keys_in_range(dct, lo=0, hi=100):
rng = range(lo, hi)
for key, lst in dct.items():
if any(l in rng for l in lst):
yield key

[*get_keys_in_range(new_dict, lo=0, hi=100)]
# ['worry', 'win']

值得一提的是membership checks on range objects are constant time (O(1))在 python-3.x 中(但在 python-2.x 中为 O(N),因此您可能需要考虑使用纯比较的其他解决方案)。

请注意,范围在正确的区间内闭合,这意味着如果您希望包含上限,则需要执行 range(lo, hi+1)


这可以缩短为

lo, hi = 0, 100
[key for key, lst in new_dict.items() if any(l in range(lo, hi) for l in lst)]
# ['worry', 'win']

您可以预缓存 range 以获得更多性能(如在函数内部完成的那样)。

rng = range(lo, hi)
[key for key, lst in new_dict.items() if any(l in rng for l in lst)]
# ['worry', 'win']

关于python - 如何根据字典值只打印一定范围内的字典键值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56793699/

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