Как отобразить элемент массива с помощью pyDash в Python

Я пытаюсь связать и сгруппировать, чем сопоставить массив с помощью pydash

Идея состоит в том, чтобы воссоздать тот же вывод этой функции lodash:

      let chainedResult = (
    _.chain(oResult)
    // Group the elements of the result based on `CEMPLOYEE` property
    .groupBy("CCALENDAR_WEEK")
    // `key` is group's name (CEMPLOYEE), `value` is the array of objects
    .map((value, key) => ({
        WEEK: key,
        Capacity: value
    }))
).value();

Пока это то, чего я добился

      _.chain(empCapacity).group_by(lambda dt:dt["CCALENDAR_WEEK"]).value()

Я застрял здесь, как сделать сопоставление ключей и значения? Как сделать приведенный ниже код на Python с помощью pydash?

          .map((value, key) => ({
        WEEK: key,
        Capacity: value
    }))

Желаемый результат:

1 ответ

Решение

Вы пробовали просто использовать? В документах говорится :

Итерация вызывается с тремя аргументами: (значение, индекс | ключ, коллекция).

Потому что, похоже, это скопировано прямо из документов lodash. В python достаточно умен, чтобы проверить подпись «итератора» (то есть функцию, которую вы передаете .map()), иначе это приведет к сбою, поскольку в python вы не можете передавать дополнительные аргументы функции, которая их не ожидает.

Так что это работает для меня:

      from pydash import py_

my_entries = [
    {'name': 'barney', 'food': 'jelly'},
    {'name': 'bill', 'food': 'jelly'},
    {'name': 'buster', 'food': 'aubergine'},
]

(
    py_(my_entries)
    .group_by('food')
    .map(lambda value, key: (key, value))
).value()

Дает:

      [
    (
        'jelly',
        [
            {'name': 'barney', 'food': 'jelly'}, 
            {'name': 'bill', 'food': 'jelly'},
        ]
    ),
    (
        'aubergine', 
        [
            {'name': 'buster', 'food': 'aubergine'}
        ]
    )
]
Другие вопросы по тегам