gpt4 book ai didi

打破字典的pythonic方法哪个值是几个字典的列表

转载 作者:行者123 更新时间:2023-12-01 23:15:19 25 4
gpt4 key购买 nike

描述

  • 我需要将一个 dict 拆分为多个 dict 的列表,保留其他部分。
  • 我要破解的 key 可能有不同的名称,但只有 cond 并且总是得到一个类型为 list 的值。

例子

  • 输入
cond = {"type":"image","questionType":["3","4","5"]}

cond = {"type":"example","fieldToBreak":["1","2","3"],"fieldInt":1,"fieldFloat":0.1}
  • 输出
[
{'type': 'image', 'questionType': '3'},
{'type': 'image', 'questionType': '4'},
{'type': 'image', 'questionType': '5'}
]

[
{'type': 'example', 'fieldToBreak': '1', 'fieldInt': 1, 'fieldFloat': 0.1},
{'type': 'example', 'fieldToBreak': '2', 'fieldInt': 1, 'fieldFloat': 0.1},
{'type': 'example', 'fieldToBreak': '3', 'fieldInt': 1, 'fieldFloat': 0.1}
]

我尝试过的

cond_queue = []
for k,v in cond.items():
if isinstance(v,list):
for ele in v:
cond_copy = cond.copy()
cond_copy[k] = ele
cond_queue.append(cond_copy)
break
  • 它有效,但我认为它不是最好的 pythonic 解决方案。

问题:

  • 有更好的 pythonic 解决方案吗?

最佳答案

利用 python 的内置函数和标准库的可能方法。该代码应适用于任意数量的键。如果原始字典中存在多个列表,它会创建值元素的所有组合。不确定这个逻辑是否正确。

import itertools

def dict_to_inflated_list(d):

ans, keys, vals = list(), list(), list()

# copy keys and 'listified' values in the same order
for k, v in d.items():
keys.append(k)
vals.append(v if isinstance(v, list) else [v])

# iterate over all possible combinations of elements of all 'listified' values
for combination in itertools.product(*vals):
ans.append({k: v for k, v in zip(keys, combination)})

return ans

if __name__ == '__main__':

cond = {'type': 'image', 'questionType': ['3', '4', '5']}
print(dict_to_inflated_list(cond))

cond = {'a': 0, 'b': [1, 2], 'c': [10, 20]}
print(dict_to_inflated_list(cond))

输出:

[{'type': 'image', 'questionType': '3'}, {'type': 'image', 'questionType': '4'}, {'type': 'image', 'questionType': '5'}]
[{'a': 0, 'b': 1, 'c': 10}, {'a': 0, 'b': 1, 'c': 20}, {'a': 0, 'b': 2, 'c': 10}, {'a': 0, 'b': 2, 'c': 20}]

关于打破字典的pythonic方法哪个值是几个字典的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69028335/

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