gpt4 book ai didi

python - 遍历多个不同大小的python字典

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

我正在从另一个类继承以下两个 python 字典

>>> print init_treats
{('001', 0): init_treat_001_0, ('001', 3): init_treat_001_3, ('001', 2): init_treat_001_2, ('002', 0): init_treat_002_0, ('002', 1): init_treat_002_1, ('002', 2): init_treat_002_2, ('002', 3): init_treat_002_3, ('001', 1): init_treat_001_1}

>>> print init_untreats
{'002': init_untreat_002, '001': init_untreat_001}

如何生成以下内容?

init_treat_001_0 + init_treat_001_1 + init_treat_001_2 + init_treat_001_3 +
init_untreat_001 == 0


init_treat_002_0 + init_treat_002_1 + init_treat_002_2 + init_treat_002_3 +
init_untreat_002 == 0

最佳答案

对您的 init_treats 键进行排序:

treats = sorted(init_treats)

现在您可以使用 itertools.groupby() 在 key 的第一部分对它们进行分组:

from itertools import groupby
from operator import itemgetter

for untreat, group in groupby(sorted(init_treats), itemgetter(0)):
# group is now a sorted iterator of keys with the same first value
if init_untreat[untreat] + sum(map(init_treats.get, group)) == 0:
# sum of init_treat_n_m + init_untreat_n is 0

因为这使用了排序,所以这是一个 O(NlogN) 的解决方案(N 是 init_treats 字典的大小)

您可以将字典用于复杂度为 O(N + K) 的解决方案(K 是 init_untreats 字典的大小):

sums = init_untreat.copy()
for untreat, id in init_treats:
sums[untreat] += init_treats[untreat, id]

for untreat, total in sums.items(): # use sums.iteritems() in Python 2
if total == 0:
# sum of init_treat_n_m + init_untreat_n is 0

因为在您的情况下 K 总是小于 N,所以渐进地说这是一个 O(N) 算法,当然。

关于python - 遍历多个不同大小的python字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22959268/

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