gpt4 book ai didi

python - 重新分配字典值列表

转载 作者:太空狗 更新时间:2023-10-29 21:35:59 25 4
gpt4 key购买 nike

我有以下命令:

groups = {"group 1": [1, 2, 3, 4],
"group 2": [5, 6, 7, 8],
"group 3": [9, 10, 11, 12],
"group 4": [13, 14]}

当组的长度小于最小大小 (group_size=4) 时,我想将成员重新分配到其他组。这种情况下的结果类似于:

groups = {"group 1": [1, 2, 3, 4, 13],
"group 2": [5, 6, 7, 8, 14],
"group 3": [9, 10, 11, 12]}

我有以下代码,它可以工作,但效率低于我想要的:

# Identify small groups
small_groups = []
for group_name, group_members in groups.items():
if len(group_members) < group_size:
small_groups.append(group_name)

# Redistribute members of small groups to the larger groups
to_redistribute = []
for group_name in small_groups:
to_redistribute.extend(groups.pop(group_name))

for group_name, group_members in groups.items():
if not to_redistribute:
break
group_members.append(to_redistribute.pop())

重要说明:组的真正成员是字符串,而不是整数。

有没有更好的方法来重新分配字典值列表?

最佳答案

您的解决方案很好,但您可以使用 itertools.cycle 将弹出和重新分发逻辑组合在一起。

from itertools import cycle

for k in list(groups.keys()):
if len(groups[k]) < group_size:
for v, k_ in zip(groups.pop(k), cycle(groups.keys())):
groups[k_].append(v)

这个想法是通过键不断循环以平等地重新分配数据。它在每次迭代中确定一个组是否超过阈值。如果一个组是有效的,那么稍后(通过重新分配)对其进行扩充将永远使其低于阈值。然而,最初低于阈值的组(但直到后来在未来的迭代中才达到)可能会变得有效,如果您从另一个已删除的组中增加值。如果这没有发生,那么它将被删除并在未来的迭代中重新分配其数据。

请记住,最初计划删除的组现在可能在重新分配后变得有效,因此我们的解决方案在某些输入的输出上会有所不同。

print(groups)
{'group 1': [1, 2, 3, 4, 13],
'group 2': [5, 6, 7, 8, 14],
'group 3': [9, 10, 11, 12]}

关于python - 重新分配字典值列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50340463/

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