我有一个如下所示的功能:
def function_name(a, b, c):
# Do some stuff with a, b, and c
print(result)
我已经生成了几本这样的词典:
dict1 = {25: 1015, 36: 1089, 41: 1138}
dict2 = {12: 2031, 25: 2403, 31: 2802}
dict3 = {12: 3492, 28: 3902, 40: 7843}
我可以为这些字典生成范围为 3 的所有可能的排列,但我似乎无法将它们作为输入输入到我的函数中。我可以像这样打印组合:
print([x for x in itertools.permutations(['dict1', 'dict2', 'dict3'], 3)])
正确生成:
[('dict1', 'dict2', 'dict3'), ('dict1', 'dict3', 'dict2'), ('dict2', 'dict1', 'dict3'), ('dict2', 'dict3', 'dict1'), ('dict3', 'dict1', 'dict2'), ('dict3', 'dict2', 'dict1')]
但是当我尝试使用以下方法将排列结果作为 a、b 和 c 提供给每个组时:
data = [x for x in itertools.permutations([dict1, dict2, dict3], 3)]
function_name(data)
我明白了:
TypeError: function_name() missing 2 required positional arguments: 'b', and 'c'
我还尝试定义函数来接受**数据作为输入,但这会导致以下结果:
function_name(**data)
TypeError: __main__.function_name() argument after ** must be a mapping, not list
如何将字典的排列作为输入传递给函数?
您的
data
是一个字典排列列表(6个元素,每个元素都是三个字典的元组)。如果您打算提供每个排列(不是同时提供所有排列),则需要一个循环:
要么:
data = [x for x in itertools.permutations([dict1, dict2, dict3], 3)]
results = [function_name(a, b, c) for a, b, c in data]
或者,您不必存储排列本身:
results = [
function_name(a, b, c)
for a, b, c in itertools.permutations([dict1, dict2, dict3], 3)
]