Список словарей, заданных для понимания понимания - PullRequest
0 голосов
/ 22 мая 2018

Моя структура данных представляет собой список диктов.Я хотел бы запустить функцию над значениями определенных ключей, а затем вывести в результате только определенное количество словарей.

from datetime import datetime
from dateutil.parser import parse

today = '05/17/18'
adict = [{'taskid':1,'desc':'task1','complexity':5,'dl':'05/28/18'},{'taskid':2,'desc':'task2','complexity':3,'dl':'05/20/18'},
         {'taskid':3,'desc':'task3','complexity':1,'dl':'05/25/18'}]

def conv_tm(t):
    return datetime.strptime(t,'%m/%d/%y')

def days(obj):
    day = conv_tm(today)
    dl = conv_tm(obj)
    dur = (dl-day).days
    if dur <0:
        dur = 1
    return dur

Я нашел самый простой способ обработки дат для 'dl'ключ должен был запустить это понимание:

vals = [days(i['dl']) for i in adict]

#this also worked, but I didn't like it as much
vals = list(map(lambda x: days(x['dl']), adict))

Теперь мне нужно сделать 2 вещи: 1) перенести этот список обратно на клавишу «dl» и 2) вернуть или напечатать (случайное)набор из 2 диктов без изменения оригинального диктанта, возможно, примерно так:

{'taskid':1,'desc':task1,'dl':8,'complexity':5}
{'taskid':3,'desc':task3,'dl':8,'complexity':1}

Приветствия

1 Ответ

0 голосов
/ 22 мая 2018

Вы можете создать новые дикты непосредственно следующим образом:

new_dicts = [{**d, 'dl': days(d['dl'])} for d in adict]

Если вам нужны отдельные значения, вы также можете использовать его для этого:

new_dicts = [{**d, 'dl': v} for d, v in zip(adict, vals)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...