python – 重新分发字典值列表
发布时间:2021-01-17 09:28:08 所属栏目: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()) 重要说明:组的真实成员是字符串,而不是整数. 有没有更好的方法来重新分配字典值列表? 解决方法您的解决方案很好,但您可以使用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,'group 2': [5,'group 3': [9,12]} (编辑:甘南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- python实现数组插入新元素的方法
- python – 将临时表与SQLAlchemy一起使用
- 在Python的Cmd.cmd中完成filename tab-completion
- python – 测试Flask登录和身份验证?
- python – matplotlib.pyplot.imshow:在使用属性“sharex”
- 比较两个窗口路径,一个包含代字号,在python中
- python – 在列表中查找项目和重复项
- python – boto dynamodb2:我可以只使用范围键查询表吗?
- python-2.7 – 如何在python中使用webdriver选择下拉列表值
- python – Scipy:加快2D复数积分的计算