Python:如何对两个dict项求网,并取数字的网和较大值的键?

问题描述 投票:0回答:1

我有以下词典,每个词典都包含一个条目

a = {'long':10}
b = {'short':5}

我想将两个字典相加得到

c = {'long': 5}

其中值5是大数减去小数的结果,而键是大数的键。

谢谢

python dictionary itertools
1个回答
0
投票

此问题可能是XY problem,但我假设您知道您要问的是什么。请记住,该解决方案可能无法完全解决您的实际问题。

假设

该代码反映了这些假设:

  • 有两个字典
  • 每个字典是一个具有一个键值对的单例
  • 值是整数
  • 结果字典也是单例的
  • 结果键来自具有较大值的字典
  • 结果值等于较大值减去较小值

代码

def d_net(a, b):
    """Return the net diff between two singleton dicts."""
    cmp_vals = lambda d: tuple(d.values())
    diff = lambda x: x[0] - x[1]

    d_max = max([a, b], key=cmp_vals)
    d_min = min([a, b], key=cmp_vals)

    key = list(d_max.keys())[0]
    vals = list(zip(d_max.values(), d_min.values()))[0]

    return {key: diff(vals)}

Demo

d_net({"long": 10}, {"short": 5})
# {'long': 5}

d_net({"long": 10}, {"short": 7})
# {'long': 3}

d_net({"long": 10}, {"short": 10})
# {'long': 0}

d_net({"long": -10}, {"short": -3})
# {'short': 7}
© www.soinside.com 2019 - 2024. All rights reserved.