使用 'dict-comprehension' 和 'for in' 和 'if' 中的两个不同 'dicts' 的 'values' 的字典

Dict whith 'list' of 'values' from of two different 'dicts', using a 'dict-comprehension' and 'for in' and 'if'

例如,给出了两个词典:NEED和DG。

需要创建一个新的'dict'(NDE),其中新的'keys'将与NEED中的相同,而新的'values'(NDE)将对应嵌套DG字典的'list',其中'keys'对应(NEED)中的'value',DG中的'values' - 'values'。

In: NEED=  {'need1': ['good1', 'good2'], 'need2': ['good2']}
    DG= {'good1': '20', 'good2': '15'}

Out: NDE={'need1':[{'good1': '20', 'good2': '15'}], 'need2': [{'good2': '15'}]}

当尝试使用列表或字典理解时,我通常会尝试使用普通的 for loop 来解决问题,因为逻辑往往更简单一些。在这种情况下,一系列循环看起来像:

NEED = {'need1': ['good1', 'good2'], 'need2': ['good2']}
DG = {'good1': '20', 'good2': '15'}

NDE = {}
for need_key, need_list in NEED.items():
    sub_dict = {}
    for need_child_key in need_list:
        sub_dict[need_child_key] = DG[need_child_key]

    NDE[need_key] = [sub_dict]

一旦我在没有理解的情况下工作,我就开始处理理解部分。

NDE = {
    need_key: [
        {need_child_key: DG[need_child_key] for need_child_key in need_list}
    ] 
    for need_key, need_list in NEED.items()
}

注意:我的解决方案假定 NEED 中的值将始终对应于 DG 中的键...

代码:

NEED = {'need1': ['good1', 'good2'], 'need2': ['good2']}
DG = {'good1': '20', 'good2': '15'}

NDE={}
for i in NEED.keys(): #initializing nested dict
    NDE[i] = {}

for i in NEED.keys():
    for j in DG.keys():
        for k in NEED[i]:
            if k==j:
                NDE[i][j] = DG[j]

print(NDE)

输出:

{'need1': {'good1': '20', 'good2': '15'}, 'need2': {'good2': '15'}}