合并具有最小公共密钥值的字典

时间:2015-02-21 05:57:58

标签: python dictionary

我有两本词典。我想合并这些字典,使得结果字典中任何键的值是用于合并的两个字典中键的值的最小值。

h1 = {"a":3, "b":5, "c":2}
h2 = {"a":1, "c":5, "d":10}

result = merge(h1, h2) = {"a":1, "b":5, "c":2, "d":10}

有一个很酷的衬垫吗?如果没有,最优雅的方式是什么?

2 个答案:

答案 0 :(得分:5)

你可以这样做

>>> {k: min(i for i in (h1.get(k), h2.get(k)) if i) for k in h1.viewkeys() | h2}
{'a': 1, 'c': 2, 'b': 5, 'd': 10}

h1.viewkeys() | h2实际上找到了set union并获取了h1h2中的所有键。然后,我们从h1和`h2。

中找到相应密钥的最小值

如果你使用的是Python 3.x,那么你只需要使用keys,这样就可以了

>>> {k : min(i for i in (h1.get(k), h2.get(k)) if i) for k in h1.keys() | h2}
{'d': 10, 'a': 1, 'b': 5, 'c': 2}

注意:上面显示的类似操作的设置正在运行,因为它们确实是设置的。引用official documentation

  

键视图设置类似,因为它们的条目是唯一且可清除的。如果所有值都是可清除的,那么(键,值)对是唯一且可清除的,那么items视图也是类似于set。 (值视图不会被视为类似集合,因为条目通常不是唯一的。)

答案 1 :(得分:-1)

你也可以试试这个:

>>> {k: min(h1.get(k) or h2[k], h2.get(k) or h1[k]) for k in (h1.keys() + h2.keys())} 
{'a': 1, 'c': 2, 'b': 5, 'd': 10}