您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – 重新分发字典值列表

5b51 2022/1/14 8:22:37 python 字数 2816 阅读 593 来源 www.jb51.cc/python

我有以下词典: 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],"group 2": [5,6,7,8],"group 3": [9,10,11,12],"group 4": [13,14]}

当组的长度小于最小大小(group_size = 4)时,我想将成员重新分配给其他组.在这种情况下的结果将是这样的:

groups = {"group 1": [1,4,13],8,14],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())

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

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

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,'group 2': [5,'group 3': [9,12]}

总结

以上是编程之家为你收集整理的python – 重新分发字典值列表全部内容,希望文章能够帮你解决python – 重新分发字典值列表所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶