更新python dicts

时间:2012-07-14 23:31:14

标签: python dictionary

如果我有字典A:

{ 'name': 'Jack',
  'age': 24,
  'friends': ['Bob', 'Alice', 'Karen'],
}

我有字典B:

{ 'name': 'Jack',
  'favorite_color': 'blue',
  'friends': ['Daren'],
}

如何组合它们以使结果只包含字典A中的字段,并且两个具有相同字段的字段根据B中的值更新A中的值。当字段是附加到它的数组时而不是替换它。

因此得到的字典C应为:

{ 'name': 'Jack',
  'age': 24,
  'friends': ['Bob', 'Alice', 'Karen', 'Daren'],
}

1 个答案:

答案 0 :(得分:3)

a = { 'name': 'Jack',
  'age': 24,
  'friends': ['Bob', 'Alice', 'Karen'],
}

b = { 'name': 'Jack',
  'favorite_color': 'blue',
  'friends': ['Daren'],
}

for key in a.keys():
    if key in b:
        if hasattr(a[key], 'extend'):
            a[key].extend(b[key])
        else:
            a[key] = b[key]

print a

输出:

{'age': 24, 'friends': ['Bob', 'Alice', 'Karen', 'Daren'], 'name': 'Jack'}

这假定如果a中的字段是列表,则b中的相同字段也是列表。换句话说,如果b['friends']不是列表,它可能会中断。如果这是一个问题,您需要检查两个字典中的字段类型并相应地定制行为。