在python中从一个字典迭代到另一个字典

在python中从一个字典迭代到另一个字典,python,list,dictionary,tuples,Python,List,Dictionary,Tuples,我有两本字典,分别是Dict1和Dict2。Dict1中每个键的值如下所示: Dict1 = { D1:[ C1, C2], D2: [C1], D3: [C2, C3], D4: [C3]} 但是Dict2由Dict1中的值组成。Dict 2中的值是由元组组成的列表,如下所示 Dict2 = { C1: [ (W1, 1 ), (W2, 5), (W3, 4) ], C2: [ (W3, 2), (W4, 6) , (W5, 7) ], C3:[ (W6,0),( W1,4), ( W

我有两本字典,分别是Dict1和Dict2。Dict1中每个键的值如下所示:

Dict1 = { D1:[ C1, C2], D2: [C1], D3: [C2, C3], D4: [C3]}
但是Dict2由Dict1中的值组成。Dict 2中的值是由元组组成的列表,如下所示

Dict2 = { C1: [ (W1, 1 ), (W2, 5),  (W3, 4) ], C2: [ (W3, 2), (W4, 6) ,  (W5, 7) ],  C3:[ (W6,0),( W1,4), ( W2, 8)], C4: [(W7,3 ),(W8, 8)])
我感兴趣的是创建Dict3,它由Dict1中的键和列表中元组的第一个元素的值组成,这些元素是Dict2中的值,如下所示。您可以忽略元组的第二个元素

例如,C1具有[W1,W2,W3]作为第一元素,C2具有[W3,W4,W5]作为第一元素。 由于Dict1中的D1是D1:[C1,C2],我想将C1和C2的列表合并为[W1,W2,W3,W4,W5]

因此,最终的期望输出是:

Dict3= { D1: [W1, W2, W3, W4, W5], D2:[W1, W2, W3], D3:[W3, W4, W5, W6, W1, W2 ] }
我如何从第1和第2节中获得第3节

这是我的密码:

        Dict1 = { 'D1':[ 'C1', 'C2'], 'D2': ['C1'], 'D3': ['C2', 'C3'], 'D4': ['C3']}

        Dict2 = { 'C1': [ ('W1', 1 ), ('W2', 5),  ('W3', 4) ], 'C2': [ ('W3', 2), ('W4', 6) ,  ('W5', 7) ],  'C3':[ ('W6',0),( 'W1',4), ( 'W2', 8)], 'C4': [('W7',3 ),('W8', 8)]}


        for d, c_list in Dict1.items():
            for c in c_list:
                for cw, w_tup_list in Dict2.items():
                    if (c == cw):
                        w_list = []
                        for w_tup in w_tup_list:
                           w_list.append(w_tup[0])
                        print (d, w_list)
我得到的电流输出是

D1 ['W1', 'W2', 'W3']
D1 ['W3', 'W4', 'W5']
D2 ['W1', 'W2', 'W3']
D3 ['W3', 'W4', 'W5']
D3 ['W6', 'W1', 'W2']
D4 ['W6', 'W1', 'W2']
我想要的输出应该是字典式的:

    Dict3 = { 'D1':['W1', 'W2', 'W3', 'W4', 'W5'], 'D2': ['W1', 'W2', 'W3'], 'D3': ['W3', 'W4', 'W5', 'W6', 'W1', 'W2' ], 'D4': ['W6', 'W1', 'W2']}

Dict2
获取项目不需要循环。只需使用
Dict2[c]

Dict1 = { 'D1':[ 'C1', 'C2'], 'D2': ['C1'], 'D3': ['C2', 'C3'], 'D4': ['C3']}
Dict2 = { 'C1': [ ('W1', 1 ), ('W2', 5),  ('W3', 4) ], 'C2': [ ('W3', 2), ('W4', 6) ,  ('W5', 7) ],  'C3':[ ('W6',0),( 'W1',4), ( 'W2', 8)], 'C4': [('W7',3 ),('W8', 8)]}
Dict3 = {}

for d, c_list in Dict1.items():
    for c in c_list:
        w = [item[0] for item in Dict2[c]]
        Dict3[d] = Dict3.get(d, []) + w

print(Dict3)

Dict2
获取项目不需要循环。只需使用
Dict2[c]

Dict1 = { 'D1':[ 'C1', 'C2'], 'D2': ['C1'], 'D3': ['C2', 'C3'], 'D4': ['C3']}
Dict2 = { 'C1': [ ('W1', 1 ), ('W2', 5),  ('W3', 4) ], 'C2': [ ('W3', 2), ('W4', 6) ,  ('W5', 7) ],  'C3':[ ('W6',0),( 'W1',4), ( 'W2', 8)], 'C4': [('W7',3 ),('W8', 8)]}
Dict3 = {}

for d, c_list in Dict1.items():
    for c in c_list:
        w = [item[0] for item in Dict2[c]]
        Dict3[d] = Dict3.get(d, []) + w

print(Dict3)
印刷品:

{'D1': ['W1', 'W2', 'W3', 'W3', 'W4', 'W5'], 'D2': ['W1', 'W2', 'W3'], 'D3': ['W3', 'W4', 'W5', 'W6', 'W1', 'W2'], 'D4': ['W6', 'W1', 'W2']}
印刷品:

{'D1': ['W1', 'W2', 'W3', 'W3', 'W4', 'W5'], 'D2': ['W1', 'W2', 'W3'], 'D3': ['W3', 'W4', 'W5', 'W6', 'W1', 'W2'], 'D4': ['W6', 'W1', 'W2']}

我不确定是否有更快的解决方案,但它能满足您的需求:

dict1 = {'D1':[ 'C1', 'C2'], 'D2': ['C1'], 'D3': ['C2', 'C3'], 'D4': ['C3']}
dict2 = {'C1': [('W1', 1), ('W2', 5),  ('W3', 4) ], 'C2': [ ('W3', 2), ('W4', 6) ,  ('W5', 7) ], 'C3':[ ('W6',0), ('W1',4), ('W2', 8)], "C4": [('W7', 3),('W8', 8)]}

dict3 = {k: [t[0] for e in v for t in dict2[e]] for k, v in dict1.items()}
print(dict3)
输出:

{'D1': ['W1', 'W2', 'W3', 'W3', 'W4', 'W5'], 'D2': ['W1', 'W2', 'W3'], 'D3': ['W3', 'W4', 'W5', 'W6', 'W1', 'W2'], 'D4': ['W6', 'W1', 'W2']}

我不确定是否有更快的解决方案,但它能满足您的需求:

dict1 = {'D1':[ 'C1', 'C2'], 'D2': ['C1'], 'D3': ['C2', 'C3'], 'D4': ['C3']}
dict2 = {'C1': [('W1', 1), ('W2', 5),  ('W3', 4) ], 'C2': [ ('W3', 2), ('W4', 6) ,  ('W5', 7) ], 'C3':[ ('W6',0), ('W1',4), ('W2', 8)], "C4": [('W7', 3),('W8', 8)]}

dict3 = {k: [t[0] for e in v for t in dict2[e]] for k, v in dict1.items()}
print(dict3)
输出:

{'D1': ['W1', 'W2', 'W3', 'W3', 'W4', 'W5'], 'D2': ['W1', 'W2', 'W3'], 'D3': ['W3', 'W4', 'W5', 'W6', 'W1', 'W2'], 'D4': ['W6', 'W1', 'W2']}

由于格式问题,我删除了旧问题。由于格式问题,我删除了旧问题。非常感谢Barmar。这是一个很好的解决方案非常感谢Barmar。这是一个很好的解决方案,这是一个很好的解决方案。谢谢,这是一个很好的解决方案。谢谢汉克斯·安德烈。这是一个非常巧妙的解决方案。谢谢Andrej。这是一个非常巧妙的解决方案。