将字典与字典映射合并,并合并值

时间:2021-04-21 14:06:40

标签: python python-3.x dictionary

有没有一种使用字典映射更新字典并组合它们的值的好方法?

例如:

input = {"Puppy": 1, "Woof": 3, "Meow": 4, "Kitten": 6}

simplified_dict_map = {
    "Puppy" : "Dogs",
    "Woof" : "Dogs",
    "Meow" : "Cats",
    "Kitten" : "Cats",
}

预期输出:

result = {"Dogs": 4, "Cats": 10}

5 个答案:

答案 0 :(得分:2)

defaultdict 可以简化此操作:

import collections
import json

data_in = {"Puppy": 1, "Woof": 3, "Meow": 4, "Kitten": 6}
simplified_dict_map = {"Puppy" : "Dogs", "Woof" : "Dogs", "Meow" : "Cats", "Kitten" : "Cats"}

results = collections.defaultdict(int)
for key, value in data_in.items():
    results[simplified_dict_map[key]] += value

print(json.dumps(results, indent=2))

应该给你:

{
  "Dogs": 4,
  "Cats": 10
}

答案 1 :(得分:1)

只需使用 for 循环!

result = {}
for key, value in simplified_dict_map.items():
    if key in input:
        if value not in result:
            result[value] = 0
        result[value] += input[key]

print(result) # {'Dogs': 4, 'Cats': 10}

答案 2 :(得分:1)

您可以使用collections.defaultdict

from collections import defaultdict

result = defaultdict(int)
for key, value in input.items():
    result[simplified_dict_map[key]] += value

答案 3 :(得分:1)

这样的事情应该可以工作:

keys = list(input.keys())
result = {}
for k in keys:
  if simplified_dict_map[k] in list(result.keys()):
    result[simplified_dict_map[k]]+=input[k]
  else:
    result[simplified_dict_map[k]]=input[k]

答案 4 :(得分:1)

solution = {}

for k1, v1 in input_dict.items():
    for k2, v2, in simplified_dict_map.items():
        if k1 == k2:
            if v2 in solution.keys():
                solution[v2] = solution[v2] + v1
            else:
                solution[v2] = v1
print(solution)