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

Python如何打乱字典中键对应的值并重新生成新字典

问题原因

你的整体思路是正确的,报错'dict_values' object is not subscriptable的原因是:Python 3 中dict.keys()、dict.values()返回的是字典视图对象,这种对象会和原字典动态关联,没有实现可变序列的下标修改接口,而random.shuffle要求传入的参数是支持原地修改的可变序列(比如列表),所以直接传入视图对象就会报错。

实现方法

只需要先把键和值都转成列表,打乱值列表后再和键配对生成新字典即可:

import random

GiftDict = {'Seth':'A', 'Jeremy':'B', 'Ben':'C'}
# 将键、值视图转成列表
person_list = list(GiftDict.keys())
value_list = list(GiftDict.values())

# 打乱值列表
random.shuffle(value_list)

# 配对生成新字典
new_gift_dict = dict(zip(person_list, value_list))
print(new_gift_dict)
# 运行示例输出:{'Seth': 'C', 'Jeremy': 'A', 'Ben': 'B'}

拓展场景(可选)

如果你需要实现错位排列,也就是保证每个key对应的value和原字典完全不同(比如互送礼物不能抽到自己的礼品),可以加一层校验逻辑:

import random

GiftDict = {'Seth':'A', 'Jeremy':'B', 'Ben':'C'}
person_list = list(GiftDict.keys())
value_list = list(GiftDict.values())

# 循环打乱直到所有值都和原对应关系不重合
while True:
    random.shuffle(value_list)
    if all(value_list[i] != GiftDict[person_list[i]] for i in range(len(person_list))):
        break

new_gift_dict = dict(zip(person_list, value_list))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 03:36:10