gpt4 book ai didi

Python:通过键(元组)将字典拆分成更小的字典

转载 作者:太空宇宙 更新时间:2023-11-04 02:11:54 25 4
gpt4 key购买 nike

我有一个字典,其中键是两个整数 (x,y) 的元组,值是字符串。

如何将这个字典拆分成更小的字典,其中拆分取决于 y 值是否大于某个阈值?

例如,假设我有键(字典值是不相关的,所以我在这里省略它们)

(0, 2), (0, 4), (0, 10), (0, 3), (0, 11), (0, 20), (0, 8), (0 , 14)

并说我有阈值 0, 5, 10, 15

然后,一个拆分应该由具有以下键的字典组成:

(0,2), (0,4), (0,3)

因为 y 值都大于 0,但不大于 5。

那么下一个字典应该有键

(0,8)

因为它大于 0 和 5,但不大于 10。

然后我们有 (0, 10), (0, 11), (0, 14)

因为它大于(或等于)0、5、10,但不是 15。

最后,我们有了 (0, 20) 本身。

最佳答案

您可以使用 collections.defaultdict ,迭代和更新由桶边界确定的键。这比创建可变数量的变量更好。

d = {(0, 2): 1, (0, 4): 2, (0, 10): 3, (0, 3): 4,
(0, 11): 5, (0, 20): 6, (0, 8): 7, (0, 14): 8}

L = [0, 5, 10, 15, float('inf')] # include infinite to facilitate later comparisons

from collections import defaultdict

dd = defaultdict(dict)

for k, v in d.items():
for i, j in zip(L, L[1:]):
if i <= k[1] < j:
dd[i].update({k: v})
break

print(dd)

defaultdict(dict,
{0: {(0, 2): 1, (0, 3): 4, (0, 4): 2},
5: {(0, 8): 7},
10: {(0, 10): 3, (0, 11): 5, (0, 14): 8},
15: {(0, 20): 6}})

可以通过使用 bisect 而不是按顺序迭代 L 中的边界来改进算法。

关于Python:通过键(元组)将字典拆分成更小的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53560160/

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