Я предполагаю, что ваши полные данные могут выглядеть примерно так:
[{'allow_day_and_time': {'day': 'Monday', 'start': 9, 'end': 18}},
{'allow_day_and_time': {'day': 'Tuesday', 'start': 9, 'end': 18}},
{'allow_day_and_time': {'day': 'Wednesday', 'start': 9, 'end': 18}},
{'allow_day_and_time': {'day': 'Thursday', 'start': 9, 'end': 18}},
{'allow_day_and_time': {'day': 'Friday', 'start': 9, 'end': 18}},
{'allow_day_and_time': {'day': 'Monday', 'start': 13, 'end': 21}},
{'allow_day_and_time': {'day': 'Tuesday', 'start': 13, 'end': 21}},
{'allow_day_and_time': {'day': 'Wednesday', 'start': 13, 'end': 21}},
{'allow_day_and_time': {'day': 'Thursday', 'start': 13, 'end': 21}},
{'allow_day_and_time': {'day': 'Friday', 'start': 13, 'end': 21}}]
Поскольку ваши данные представляют собой list
из dictionary
элементов, вы можете получить доступ к dictionary
просто указав key
в скобках []
, или вы можете получить key
и value
, используя dictionary.iteritems()
Итерация с dictionary.iteritems()
In [ ]: index = 0
...: while index < len(availability_constraints):
...: for key, value in availability_constraints[index].iteritems():
...: print(key, value)
...: index += 1
...:
('allow_day_and_time', {'start': 9, 'end': 18, 'day': 'Monday'})
('allow_day_and_time', {'start': 9, 'end': 18, 'day': 'Tuesday'})
('allow_day_and_time', {'start': 9, 'end': 18, 'day': 'Wednesday'})
('allow_day_and_time', {'start': 9, 'end': 18, 'day': 'Thursday'})
('allow_day_and_time', {'start': 9, 'end': 18, 'day': 'Friday'})
('allow_day_and_time', {'start': 13, 'end': 21, 'day': 'Monday'})
('allow_day_and_time', {'start': 13, 'end': 21, 'day': 'Tuesday'})
('allow_day_and_time', {'start': 13, 'end': 21, 'day': 'Wednesday'})
('allow_day_and_time', {'start': 13, 'end': 21, 'day': 'Thursday'})
('allow_day_and_time', {'start': 13, 'end': 21, 'day': 'Friday'})
Допустим, вы запрашиваете начало Monday
, вы можете использовать операторы if
и ==
, чтобы проверить, ссылается ли value
этого конкретного элемента списка на Monday
:
In [ ]: index = 0
...: while index < len(availability_constraints):
...: for key, value in availability_constraints[index].iteritems():
...: if value['day'] == 'Monday':
...: print("Start: {:>4}, Finish: {:>4}".format(value['start'], value['end']))
...: index += 1
...:
Start: 9, Finish: 18
Start: 13, Finish: 21
Итерации с []
и подача в жестком коде key
Еще один более простой / жестко закодированный, который может быть не лучшим способом программирования, показан ниже:
In [ ]: for a_day in availability_constraints:
...: if a_day['allow_day_and_time']['day'] == 'Monday':
...: print("Start: {:>4}, Finish: {:>4}".format(
...: a_day['allow_day_and_time']['start'],
...: a_day['allow_day_and_time']['end']))
...:
...:
Start: 9, Finish: 18
Start: 13, Finish: 21
Мы также можем ввести косвенное обращение для лучшего обслуживания:
In [ ]: key = 'allow_day_and_time'
...: target_day = 'Monday'
...: begin = 'start'
...: finish = 'end'
...: for a_day in availability_constraints:
...: if a_day[key]['day'] == target_day:
...: print("Start: {:>4}, Finish: {:>4}".format(
...: a_day[key][begin],
...: a_day[key][finish]))
...:
...:
Start: 9, Finish: 18
Start: 13, Finish: 21
Вывод: Pythonic way
Проверьте эту ссылку для pythonic string formatting
In [ ]: for a_day in availability_constraints:
...: for key, value in a_day.iteritems():
...: if value['day'] == 'Monday':
...: print("Start: {:>4}, Finish: {:>4}".format(value['start'], value['end']))
Start: 9, Finish: 18
Start: 13, Finish: 21
Какой стиль программирования лучший?Ну, я сам достаточно самоуверенный, поэтому я полагаю, что это зависит от ваших предпочтений, если вы не хотите оптимизировать эту программу: D