簡體   English   中英

遍歷嵌套字典,檢查 bool 值以獲取數組索引

[英]Iterate through nested dict, check bool values to get indexes of array

我有一個帶有布爾值的嵌套字典,例如:

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 中的字段,檢查它們是否為真,以及它們是否為 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

但我想知道是否有更多的 pythonic 方法來解決這個問題。

拋開字典的順序問題,您可以執行以下操作:

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}}}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM