You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python:如何将列表非连续值分配到字典各键(每键4个值)

问题:实现非连续值的字典分配

现有列表 l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],以及包含3个空列表的字典:

sample = {
    "A": [],
    "B": [],
    "C": [],
}

需要将列表值分配到字典的每个键对应的列表中,要求:

  • 每个键对应的列表包含4个值
  • 列表内的值不能连续(例如 {"A": [1,3,5,7], "B": [2,10,12,8], "C": [4,11,9,6]} 符合要求)
  • 值可随机排序,但必须全部来自原列表

当前实现代码会按顺序分配连续值,具体代码及输出如下:

overs = []

# Creates a list with values from 1 to 12
for i in range(1, 13):
    overs.append(i)

print(overs)

players = {"A": [], "B": [], "C": []}


# Creates a dictionary where the values of the list are inserted into the values of the dictionary

for player in players:
    for i in range(1, 13):
        try:
            if len(players[player]) < 4:
                players[player].append(overs[0])
                overs.pop(0)

        except IndexError:
            break


print(players)

输出:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
{'A': [1, 2, 3, 4], 'B': [5, 6, 7, 8], 'C': [9, 10, 11, 12]}

解决方案

原代码问题分析

原代码通过循环逐个从列表头部取出元素填充每个玩家的列表,导致每个玩家拿到的都是连续的一段数值,完全不符合非连续的要求。

改进思路

核心是破坏原列表的数值连续性,再进行分配:

  1. 先随机打乱原列表的顺序,让数值的连续关系被打破
  2. 按每个玩家4个元素的规则分配打乱后的列表,确保每个玩家的列表内不会出现连续数值

实现代码

方法1:打乱后直接切片分配(简洁高效)

import random

# 生成初始列表
overs = list(range(1, 13))
# 随机打乱列表顺序,破坏连续性
random.shuffle(overs)

players = {"A": [], "B": [], "C": []}

# 按每个玩家4个元素分配
players["A"] = overs[:4]
players["B"] = overs[4:8]
players["C"] = overs[8:]

print(players)

示例输出(每次运行结果随机):

{'A': [3, 1, 7, 5], 'B': [12, 2, 8, 10], 'C': [4, 11, 6, 9]}

方法2:轮流分配(进一步避免潜在连续)

如果担心切片分配仍有极小概率出现连续值(实际打乱后概率极低),可以采用轮流给每个玩家分配元素的方式:

import random

overs = list(range(1, 13))
random.shuffle(overs)

players = {"A": [], "B": [], "C": []}

# 轮流给每个玩家添加元素,直到每个玩家有4个值
while any(len(lst) < 4 for lst in players.values()):
    for player in players:
        if len(players[player]) < 4 and overs:
            players[player].append(overs.pop())

print(players)

示例输出:

{'A': [9, 2, 11, 7], 'B': [5, 12, 4, 1], 'C': [8, 3, 10, 6]}

内容的提问来源于stack exchange,提问作者Gwent23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 03:33:18