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

如何用字典列表中的随机元素替换列表中重复出现的元素?

问题描述

给定一个包含重复元素的列表:

my_list = ['a', 'b', 'c', 'd', 'b', 'a', 'c', 'a']

以及一个映射字典,每个键对应一组可选值:

my_dict = {'a':[1, 2], 'b':[3, 4], 'c':[5, 6], 'd':[7, 8]}

需要实现两个需求:

  • 依据列表元素(作为字典键),从对应值列表中随机选取一个值
  • 列表中每出现一次该键,都重新执行随机取值操作

尝试使用Pandas实现时,编写了以下代码:

import pandas as pd
import random

df = pd.DataFrame(my_list, index=[0,1,2,3,4,5,6,7], columns=['Letters'])
df['Random_Values'] = df['Letters'].map({k:random.choice(v) for k,v in my_dict.items()})

但输出结果中,同一个键的所有实例都复用了同一个随机值(比如所有'a'要么全是1要么全是2),无法满足每次出现都重新随机的要求。需要修改代码,同时接受纯Python列表的实现方案。


解决方案

一、Pandas 修改方案

原代码的问题在于:字典推导式{k:random.choice(v) for k,v in my_dict.items()}仅在map()执行前运行一次,每个键提前固定了唯一的随机值,后续所有该键的元素都会复用这个值。

改用apply()方法,对每一行的元素单独调用随机选择逻辑:

import pandas as pd
import random

my_list = ['a', 'b', 'c', 'd', 'b', 'a', 'c', 'a']
my_dict = {'a':[1, 2], 'b':[3, 4], 'c':[5, 6], 'd':[7, 8]}

df = pd.DataFrame(my_list, columns=['Letters'])
df['Random_Values'] = df['Letters'].apply(lambda x: random.choice(my_dict[x]))

执行后,同一个键的不同实例会得到不同的随机值,示例输出:

Letters  Random_Values
0       a              2
1       b              4
2       c              5
3       d              8
4       b              3
5       a              1
6       c              6
7       a              2

二、纯Python列表实现方案

直接遍历原列表,对每个元素单独执行随机取值操作,生成结果列表:

import random

my_list = ['a', 'b', 'c', 'd', 'b', 'a', 'c', 'a']
my_dict = {'a':[1, 2], 'b':[3, 4], 'c':[5, 6], 'd':[7, 8]}

random_values = [random.choice(my_dict[item]) for item in my_list]

生成的random_values列表会对应原列表每个元素的随机取值,示例结果:[1, 3, 6, 7, 4, 2, 5, 1],完全满足每次出现都重新随机的需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 16:40:41