Python大牛求解多个字典的最大值组合成新字典

Python大牛求解多个字典的最大值组合成新字典

大牛:小白看你一脸愁容的。怎么了?

小白:还不是经理昨天给了一个莫名其妙的需求。要我写个方法求解多个字典的最大值生成一个新字典。现在还没头绪,下班之前就要交了,这个愁死我啦。

小白:大牛哥,要不你给看看怎么解?

大牛:没问题!你说说具体怎么个需求。我大牛可是有两把刷子的人,难道还能难住我?

小白:就比如是这样有三个字典 a = {"a": 1, "b": 2}, b = {"a": 2, "b": 2},c = {"a": 2, "b": 5, "c": 4}把里面相同key最大的value值取出来变成新的字典,a,b,c三个字典取到新字典为 {"a": 2, "b": 5,"c":4}。每个字典里面的key不一定相同,但是相同的要取到最大的value值。

我的想法是直接遍历字典,我实现方式是下面这样的:

a = {"a": 1, "b": 2, "g": 3}
b = {"a": 2, "b": 2}
c = {"a": 2, "b": 5, "c": 4}


# 将a字典默认为最大然后与b字典比较
for i in b:
if i not in a:
a[i] = b[i] # 如果b中存在a中不存在的则添加到a中
else:
if a[i] < b[i]: # 如果a中存在b中也存在的,判断b中大于a中的进行交换
a[i] = b[i]
# 将a字典默认为最大然后与c字典比较
for i in c:
if i not in a:
a[i] = c[i]
else:
if a[i] < c[i]:
a[i] = c[i]

print(a)

小白:但是我把代码交给经理时候,他说我写的代码怎么这么low,但是我功能实现了呀。

大牛:O(∩_∩)O哈哈~,咱不能光想着实现功能啊,代码可读性也是很重要的。

大牛:看了你的解法之后,大牛哥也有点思路。

主要用到技术点:

1. 集合去重

2. 字典的get方法当key不存在时返回默认值这特性

3. max函数获取最大值

4. 字典推导式

a = {"a": 1, "b": 2, "g": 3}
b = {"a": 2, "b": 2}
c = {"a": 2, "b": 5, "c": 4}

# 获取到所有字典的key,构造成集合。
keys = set(list(a.keys()) + list(b.keys()) + list(c.keys()))

def f(x):
# 获取到同一个key在不同字典的最大值,如果不存在这个key就返回0
# 这里避免某个字典不存在key抛出异常,使用get方法并传一个默认值0
return max(a.get(x, 0), b.get(x, 0), c.get(x, 0))

# 迭代所有的key,然后调用 f 函数获取到最大值,再通过dict转回字典
result = dict((i, f(i)) for i in keys)
print(result)

大牛:小白这看起来是不是更为简洁点。既然是操作字典,我们可以多考虑字典的方法。

小白:大牛哥,真厉害我怎么就没想到呢!

晚上请你吃饭怎样?

大牛:啊!晚上要加班鲁代码呢!

路人甲:这大牛注定单身啊?


分享到:


相關文章: