jsp网站开发实训,备案期间 需要关闭网站,wordpress 设置 logo,网站开发外包业务怎么接python-列表字典的笛卡尔积我正在尝试编写一些代码来测试一堆输入参数的笛卡尔积。我看过itertools#xff0c;但是它的product功能并不是我想要的。 是否有一种简单明了的简单方法来制作一个字典#xff0c;每个字典中有任意数量的键和任意数量的元素#xff0c;然后生成具…python-列表字典的笛卡尔积我正在尝试编写一些代码来测试一堆输入参数的笛卡尔积。我看过itertools但是它的product功能并不是我想要的。 是否有一种简单明了的简单方法来制作一个字典每个字典中有任意数量的键和任意数量的元素然后生成具有下一个排列的字典输入options {number: [1,2,3], color: [orange,blue] }print list( my_product(options) )输出示例[ {number: 1, color: orange},{number: 1, color: blue},{number: 2, color: orange},{number: 2, color: blue},{number: 3, color: orange},{number: 3, color: blue}]4个解决方案49 votes好的谢谢dfan告诉我我在错误的地方看。 我现在知道了from itertools import productdef my_product(inp):return (dict(zip(inp.keys(), values)) for values in product(*inp.values())编辑经过多年的Python经验我认为一个更好的解决方案是接受list(product_dict(**mydict))而不是输入字典。 调用样式更类似于原始的kwargs。我还认为编写生成器函数(而不是返回生成器表达式的函数)可使代码更清晰。 所以def product_dict(**kwargs):keys kwargs.keys()vals kwargs.values()for instance in itertools.product(*vals):yield dict(zip(keys, instance))如果需要传递字典list(product_dict(**mydict))。使用kwargs(而不是任意输入类)的一个显着变化是它防止对键/值进行排序至少直到Python 3.6为止。Seth Johnson answered 2020-01-24T02:44:36Z17 votes塞思答案的Python 3版本。import itertoolsdef dict_product(dicts): list(dict_product(dict(number[1,2], characterab)))[{character: a, number: 1},{character: a, number: 2},{character: b, number: 1},{character: b, number: 2}]return (dict(zip(dicts, x)) for x in itertools.product(*dicts.values()))Tarrasch answered 2020-01-24T02:44:56Z7 votes顺便说一下这不是排列。 排列是列表的重排。 这是从列表中可能选择的列举。编辑在记住它被称为笛卡尔积之后我想到了这个import itertoolsoptions {number: [1,2,3], color: [orange,blue] }product [x for x in apply(itertools.product, options.values())]print [dict(zip(options.keys(), p)) for p in product]dfan answered 2020-01-24T02:45:20Z3 votes# I would like to dokeys,values options.keys(), options.values()# but I am not sure that the keys and values would always# be returned in the same relative order. Comments?keys []values []for k,v in options.iteritems():keys.append(k)values.append(v)import itertoolsopts [dict(zip(keys,items)) for items in itertools.product(*values)]结果是opts [{color: orange, number: 1},{color: orange, number: 2},{color: orange, number: 3},{color: blue, number: 1},{color: blue, number: 2},{color: blue, number: 3}]Hugh Bothwell answered 2020-01-24T02:45:40Z