gpt4 book ai didi

python - "Simpler"列表理解+product()组合的方法

转载 作者:行者123 更新时间:2023-12-01 03:11:34 25 4
gpt4 key购买 nike

我有一本混合了字符串和列表的字典:

sample_dict = {'numbers': [1, 2, 3], 'ref': 'some text'}

目标是将其组合并“扁平化”为可迭代的单个字典,然后通过 Celery 将其用作一组计划任务的参数:

# end goal:
[{'numbers': 1, 'ref': 'some text'},
{'numbers': 2, 'ref': 'some text'},
{'numbers': 3, 'ref': 'some text'}]

我尝试使用传统循环来编写它,以保持代码简单,以便以后适应或修复错误,但我无法找到一种可以访问所有必要的嵌套变量的方法。

结果是使用几个相对复杂的列表推导式:

raw_vals = [[(i,v)] if isinstance(v,str) else ([(i,b) for b in v]) for i,v in sample_dict.items()]
end_goal = [dict(i) for i in product(*raw_vals)]

因此问题:是否有一种更冗长但可能不那么神秘的方法来获得相同的结果,使用标准循环或类似的循环?我知道这可能会引发关于可读性与 LOC 的争论,但如果可以的话,请尝试忽略它。

最佳答案

我建议从第一个条件中提取出条件:

def assoc(i, v):
if isinstance(v, list):
return [(i, b) for b in v]
return [(i, v)]

raw_vals = [assoc(i, v) for i, v in sample_dict.items())]
end_goal = [dict(i) for i in product(*raw_vals)]

那么推导式就是映射。

我还可能建议测试该值是否是列表而不是字符串,因为这将允许值是列表以外的任何类型并且不会被迭代。这也允许将列表的子类型视为列表。

关于python - "Simpler"列表理解+product()组合的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42856398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com