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

如何从列表中每个字典的非空嵌套列表随机提取值?

从字典列表中随机提取非空嵌套值的实现方案

给定如下字典列表,需要对每个字典随机提取一个非空列表中的值,最终得到包含3个值的结果列表(例如['b1','b6','d9']或['e1','c4','a7']):

l = [
    {'A':[],'B':['b1','b2'],'C':[],'D':['d1','d2','d3'],'E':['e1']},
    {'A':['a4','a5','a6'],'B':['b6'],'C':['c4','c5','c6'],'D':[],'E':['e4','e5','e6']},
    {'A':['a7'],'B':['b7','b8'],'C':['c7','c8','c9'],'D':['d7','d8','d9'],'E':[]},
]

使用random.choice()时可能会选中空列表,需要重试直到选中非空列表,以下是两种可行的实现方式:

方法一:循环重试直到选中非空列表

直接针对每个字典循环随机选择键对应的列表,直到拿到非空列表后再从中提取值:

import random

result = []
for dic in l:
    while True:
        selected_list = random.choice(list(dic.values()))
        if selected_list:
            result.append(random.choice(selected_list))
            break

print(result)

方法二:先过滤非空列表再随机选择

提前过滤每个字典中的非空列表,再从过滤后的集合中随机选择,避免无效重试,效率更高:

import random

result = []
for dic in l:
    # 筛选当前字典中的所有非空列表
    valid_lists = [lst for lst in dic.values() if lst]
    # 先随机选一个非空列表,再从中随机选值
    result.append(random.choice(random.choice(valid_lists)))

print(result)

注:方法二的逻辑更高效,因为它直接排除了空列表,不需要反复尝试;方法一逻辑更直观,适合理解基础流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 08:20:42