Как обновить строку с указанием формата c, используя словарь с python - PullRequest
0 голосов
/ 06 августа 2020

У меня есть большой словарь со значениями формата времени. Примером словаря является «mydict». каждый список ([[]]) показывает время недели. Время суток разделено символами ','. Например, в субботу время 06: 00 - 09:30 - 10:30 - 14:00 - 17:00 - 21: 00 . и воскресенье: 07: 00 - 09:30 - 11:30 - 14:00 - 16:00 - 21: 00 в словаре. Словарь включает в себя 7 дней и тысячи ключей / значений.

У меня также есть строка с заданным форматом c на 7 дней. Я упростил строку до 2 дней. Я хочу заменить значения "dayname", "endTime" и "startTime" строки на вложенный список словаря, а затем записать его в формате словаря. Мой идеальный результат показан ниже.

Как я могу решить проблемы?

mydict= {'x': [['06:00 - 09:30 AM - 10:30 AM - 14:00 - 17:00 - 21:00, 07:00 - 09:30 AM - 11:30 AM - 14:00 - 16:00 - 21:00']]}

Ожидаемый результат:

{'x': [{
    "DayName": "saturday",
    "timeList": [
        {
            
            "endTime": "06:00", 
            "startTime": "09:30"
        },
        {
            
            "endTime": "10:30", 
            "startTime": "14:00"
        },
        {
            
            "endTime": "17:00", 
            "startTime": "21:00"
        }
    ]
},

{
    "DayName": "sunday",
    "timeList": [
        {
           
            "endTime": "07:00",
            "startTime": "09:30"
        },
        {
           
            "endTime": "11:30",
            "startTime": "14:00"
        },
        {
           
            "endTime": "16:00",
            "startTime": "21:00"
        }
    ]
}]}

Ответы [ 2 ]

1 голос
/ 06 августа 2020

Попробуйте следующее:

mydict = {'x': [['06:00 - 09:30 - 10:30 - 14:00 - 17:00 - 21:00', '07:00 - 09:30 - 11:30 - 14:00 - 16:00 - 21:00']]}
k = ('endTime', 'startTime')
weeks = ['saturday', 'sunday']

dd = [[dict(zip(k, y)) for y in (z for z in zip(x.split(' - ')[::2], x.split(' - ')[1::2]))] for x in mydict['x'][0]]
res = {'x': [{'DayName': x, 'timeList': y} for x, y in zip(weeks, dd)]}

print(res)

Вывод:

{'x': [{'DayName': 'saturday',
        'timeList': [{'endTime': '06:00', 'startTime': '09:30'},
                     {'endTime': '10:30', 'startTime': '14:00'},
                     {'endTime': '17:00', 'startTime': '21:00'}]},
       {'DayName': 'sunday',
        'timeList': [{'endTime': '07:00', 'startTime': '09:30'},
                     {'endTime': '11:30', 'startTime': '14:00'},
                     {'endTime': '16:00', 'startTime': '21:00'}]}]}
0 голосов
/ 06 августа 2020

Это простой подход, и я не знаю, соответствует ли он вашим требованиям.

import json

x_data = json.loads(idealresult['x'])
days = []
for item in x_data:
    days.append('-'.join([f"{tm['startTime']} - {tm['endTime']}" for tm in item['timeList']]))

idealresult['x'] = json.dumps(days)

Я потерялся в направлении.

mydict= {'x': [['06:00 - 09:30 AM - 10:30 AM - 14:00 - 17:00 - 21:00, 07:00 - 09:30 AM - 11:30 AM - 14:00 - 16:00 - 21:00']]}
days = ['saturday', 'sunday']
x_data = mydict['x'][0][0]
results = []
for i,item in enumerate(x_data.split(', ')):
    tmp = item.split(' - ')
    results.append(
        {
            'DayName': days[i % 2], 
            'timeList': [f'{tmp[i]} - {tmp[i+1]}' for i in range(0, len(tmp), 2)]
        }
    )

idealresult = dict(x=json.dumps(results))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...