Обновление значений в списке словаря - PullRequest
0 голосов
/ 17 сентября 2018

Предположим, у вас есть словарь со списком дат (извлекается из Excel в виде чисел с плавающей запятой) в качестве значения в под-словаре округов.

 master_dictionary = {'MO': {
   'Lincoln County': [43378.0, 43378.0, 43378.0],
   'Franklin County': [43357.0, 43357.0],
   'Camden County': [43208.0, 43208.0, 43208.0],
   'Miller County': [43208.0],
   'Morgan County': [43208.0, 43208.0]},
  'WI': {'Marathon County': [43371.0, 43371.0, 43371.0, 43371.0, 43371.0]},
  'NJ': {'Atlantic County': [43340.0, 43340.0]}}

Моя цель: 1) получить максимальное значение этих «даты» и 2) преобразовать максимальное «дата» в значение '%M/%D/%Y', используя datetime.strftime. Я могу получить максимальное значение и преобразовать его, но я пытаюсь получить его для обновления значений даты в главном словаре. Как я могу это сделать?

for key, value in master_dictionary.items():
    counties = value
    for k, v in counties.items():
        d = max(v)
        year, month, day, hour, minute, second = xldate_as_tuple(d, book_datemode)
        n_date = rawDate = (str(month) + "/" + str(day) + "/" + str(year))
        print(n_date)

Ответы [ 3 ]

0 голосов
/ 17 сентября 2018

Использование функции xldate_as_datetime из библиотеки :

for key, val in master_dictionary.items():
    for skey, sval in val.items():
        # temporary assignment to overwrite dates
        # with max for the given county (skey)
        cdate = xldate_as_datetime(max(sval),0).strftime('%m/%d/%Y')
        # assign the max date to 
        # the county in master_dictionry
        master_dictionary[key][skey] = cdate
0 голосов
/ 17 сентября 2018

Обычно самый простой способ сделать это - создать новый словарь, вместо того, чтобы пытаться изменить существующий (это особенно верно, если вы добавляете или удаляете ключи):

from xlrd import xldate_as_datetime
from pprint import pprint

new_dict = {k: {k1: xldate_as_datetime(max(v1),0).strftime('%m/%d/%Y') for k1, v1 in v.items()} 
            for k, v in master_dictionary.items()}

pprint(new_dict)

печать

{'MO': {'Camden County': '04/18/2018',
        'Franklin County': '09/14/2018',
        'Lincoln County': '10/05/2018',
        'Miller County': '04/18/2018',
        'Morgan County': '04/18/2018'},
 'NJ': {'Atlantic County': '08/28/2018'},
 'WI': {'Marathon County': '09/28/2018'}}
0 голосов
/ 17 сентября 2018

Просто используйте что-нибудь, чтобы получить i = np.argmax(v) (numpy), чтобы у вас был индекс, затем получите доступ к этому местоположению и обновите с помощью master_dictionary[key][k][i] = n_date.Если вы хотите заменить весь список, используйте master_dictionary[key][k] = [n_date], и вам не понадобится argmax.Удачи!

...