首页 > 解决方案 > 需要针对每个其他键及其值对每个键及其值执行一个函数,并记录结果

问题描述

我正在编写一段代码,需要对字典中的所有键/值执行函数循环样式。

为了简化问题,我有一个字典:

my_dict = {a: [1,2,3,4,5], b: [5,4,3,2,1], c: [2,4,3,5,1], d: [5,1,4,2,3]}

我想调用一个函数,该函数将每个键值作为每个其他键的输入:

(该函数将输出一个整数。)

x1 = my_func(my_dict[a], my_dict[b])
x2 = my_func(my_dict[a], my_dict[c])
x3 = my_func(my_dict[a], my_dict[d])
x4 = my_func(my_dict[b], my_dict[c])
x5 = my_func(my_dict[b], my_dict[d])
x6 = my_func(my_dict[c], my_dict[d])

并保存结果:

result_dict = {a:{b:x1, c:x2, d:x3 }, b:{a:x1, c:x4, d:x5}, c:{a:x2, b:x4, d:x6}, d:{a:x3, b:x5, c:x6}}

我已经尝试了多个 for 循环,但我正在绕圈子:

my_dict = {1: [1,2,3,4,5], 2: [5,4,3,2,1], 3: [2,4,3,5,1], 4: [5,1,4,2,3]}

output_dict = {}
for key in my_dict:
    for next_key in my_dict:
        output_dict[key] = {next_key: my_func(my_dict[key],my_dict[next_key])}

print(output_dict)

感谢您的时间。

标签: pythondictionary

解决方案


您可以稍微修改循环并将其转换为字典理解,以按照您需要的方式工作:

my_dict = {1: [1,2,3,4,5], 2: [5,4,3,2,1], 3: [2,4,3,5,1], 4: [5,1,4,2,3]}

output_dict = {}
for key in my_dict:
    output_dict[key] = {next_key: my_func(my_dict[key], my_dict[next_key]) for next_key in my_dict if key != next_key}

print(output_dict)

无耻地取自另一个答案(:p),假设如果my_func是:

def my_func(x, y):
    return x[0] + y[0]

这会输出预期的:

{1: {2: 6, 3: 3, 4: 6}, 2: {1: 6, 3: 7, 4: 10}, 3: {1: 3, 2: 7, 4: 7}, 4: {1: 6, 2: 10, 3: 7}}

推荐阅读