将字典排列作为输入传递给函数

问题描述 投票:0回答:1

我有一个如下所示的功能:

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

如何将字典的排列作为输入传递给函数?

python permutation
1个回答
0
投票

您的

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)
]
© www.soinside.com 2019 - 2024. All rights reserved.