Python: как net две записи dict и взять net числа и ключ большего значения? - PullRequest
0 голосов
/ 27 мая 2020

У меня есть следующие словари, которые содержат по одной записи в каждом

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

Я хотел бы net два словаря, чтобы получить

c = {'long': 5}

, где значение 5 является результатом из большего числа минус меньшее число, и ключ является ключом большего числа.

Спасибо

1 Ответ

0 голосов
/ 30 мая 2020

Этот вопрос может быть проблемой XY , но я предполагаю, что вы знаете, о чем спрашиваете. Имейте в виду, что решение может не полностью решить вашу актуальную проблему.

Допущения

Код отражает следующие предположения:

  • Есть два dicts
  • Каждый dict является одноэлементным с одной парой ключ-значение
  • Значения являются целыми числами
  • Результирующий dict также одноэлементный
  • Результирующий ключ происходит из словаря с большим значением
  • Результирующее значение равно большему минус меньшие значения

Код

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)}

Демо

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}
...