遍历嵌套字典,检查bool值以获取数组的索引



我有一个嵌套的布尔值字典,如:

assignments_dict = {"first": {'0': True,
'1': True},
"second": {'0': True,
'1': False},
}

和一个数组,其元素个数等于assignments_dict中True值的个数:

results_array = [10, 11, 12]

,最后是一个字典,用于这样结构的结果:

results_dict = {"first": {'0': {'output': None},
'1': {'output': None}},
"second": {'0': {'output': None},
'1': {'output': None}},
}

我需要遍历assignment_dict中的字段,检查它们是否为True,如果它们为True,则取results_array的下一个元素并将其替换为results_dict中的相应字段。所以,我的最终输出应该是:

results_dict = {'first': {'0': {'output': 10},
'1': {'output': 11}},
'second': {'0': {'output': 12},
'1': {'output': None}}}

我用一种非常简单的方法做到了:

# counter used to track position in array_outputs
counter = 0
for outer_key in assignments_dict:
for inner_key in assignments_dict[outer_key]:
# check if every field in assignments_dict is True/false
if assignments_dict[outer_key][inner_key]:
results_dict[outer_key][inner_key]["output"] = results_array[counter]
# move on to next element in array_outputs
counter += 1

但是我想知道是否有一个更python的方法来解决这个问题。

不考虑字典顺序的问题,您可以执行以下操作:

it_outputs = iter(array_outputs)
for k, vs in results_dict.items():
for ki, vi in vs.items():
vi["output"] = next(it_outputs) if assignments_dict[k][ki] else None

print(results_dict)

{'first': {'0': {'output': 10}, '1': {'output': 11}}, 'second': {'0': {'output': 12}, '1': {'output': None}}}

注意,从Python 3.7开始字典保持插入顺序。

results_iter = iter(results_array)
for key, value in assignments_dict.items():
for inner_key, inner_value in value.items():
if inner_value:
results_dict[key][inner_key]['output'] = next(results_iter)

print(results_dict)

输出:

{'first': {'0': {'output': 10}, '1': {'output': 11}}, 'second': {'0': {'output': 12}, '1': {'output': None}}}

相关内容

  • 没有找到相关文章

最新更新