组合 2 个字典并交换键和值

时间:2021-05-07 08:59:45

标签: python dictionary

我有两本字典,例如:

d1 = { 'AAPL' : [1, 2, 3] , 'MSFT' : [3, 4, 5] }

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

我需要一本字典,例如:

d3 = {1 : ['AAPL'], 2 : ['AAPL'], 3 : ['AAPL', 'MSFT'], 4 : ['MSFT'], 5 : ['MSFT']}  

我如何获得 d3

2 个答案:

答案 0 :(得分:1)

在您的示例中,您的字典 d2 没用。仍然:

d1 = { 'AAPL' : [1, 2, 3] , 'MSFT' : [3, 4, 5] }

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

d3 = {}

for v in d1.values():
    for k in v:
        d3[k] = []

for k,v in d1.items():
    for x in v:
        d3[x].append(k)

print (d3)

输出:

{1: ['AAPL'], 2: ['AAPL'], 3: ['AAPL', 'MSFT'], 4: ['MSFT'], 5: ['MSFT']}

你也可以这样做:

for k,v in d1.items():
    for x in v:
        if x not in d3.keys():
            d3[x] = []
        d3[x].append(k)

print (d3)

这里不是执行相同的循环两次(一次用于初始化,另一次用于填充),而是测试您的密钥是否存在并相应地进行。

答案 1 :(得分:1)

collections.defaultdict 会做得很好

d1 = {'AAPL': [1, 2, 3], 'MSFT': [3, 4, 5]}

result = defaultdict(list)
for k, v in d1.items():
    for x in v:
        result[x].append(k)

print(result)
# {1: ['AAPL'], 2: ['AAPL'], 3: ['AAPL', 'MSFT'], 4: ['MSFT'], 5: ['MSFT']}