使用相同的键但不同的值类型组合两个词典

时间:2016-01-15 05:59:19

标签: python dictionary

我有两个词典,每个词典都有相同的键,但值不同。

food = {'fruit' : 5, 'vegetable' : 2, 'dairy' : 1, 'meat' : 3, 'grain' : 1}

fav = { 'fruit' : ['apple', 'orange', 'banana', 'grape', 'plum'],
        'vegetable' : ['carrot', 'corn'],
        'dairy' : ['milk'],
        'meat' : ['chicken', 'egg', 'beef'],
        'grain' : ['bread']
      }

我希望实现的结果将是这样的,

eats = { 'fruit' : 5, ['apple', 'orange', 'banana', 'grape', 'plum'], 
         'vegetable' : 2, ['carrot', 'corn'],
       ...

等等。

*****编辑********

此外,每个字典中的某些条目可能为空,例如

food = {'fruit' : 5, 'vegetable' : 2, 'dairy' : 1, 'meat' : 3, 'grain' : 1, 'sweets' : 0}

糖果不是喜欢的,所以我如何结合这些字典保存糖果,而不是出现关键错误?

3 个答案:

答案 0 :(得分:5)

您可以使用dict comprehension和元组。我认为你无法得到你期望的输出,因为它不是有效的dict(逗号应该是分开的neihbor键):

eats = {key : (food[key],fav[key]) for key in food}

print(eats)
{'dairy': (1, ['milk']),
 'fruit': (5, ['apple', 'orange', 'banana', 'grape', 'plum']),
 'grain': (1, ['bread']),
 'meat': (3, ['chicken', 'egg', 'beef']),
 'vegetable': (2, ['carrot', 'corn'])}

修改

要进行编辑,您需要在fav dict中添加检查键:

eats = {key : (food[key],fav[key]) for key in food if key in fav}

您的示例的结果与发布的结果相同。

答案 1 :(得分:0)

for key in food:
    eats[key] = [food[key], fav.get(key, [])]

或者,只有一行,

eats = map(lambda x: [food[x], fav.get(x, [])], food.keys())

答案 2 :(得分:0)

您可以使用Dictionary Comprehension

>>> {key:[val, fav[key]] for key,val in food.items()}
{'vegetable': [2, ['carrot', 'corn']], 'dairy': [1, ['milk']], 'fruit': [5, ['apple', 'orange', 'banana', 'grape', 'plum']], 'grain': [1, ['bread']], 'meat': [3, ['chicken', 'egg', 'beef']]}