Просто измените command_show()
функцию на это, если вы не» t используйте dict.items()
, тогда вы будете только получите ключи (не обе клавиши и значения):
def command_show(calendar):
for (date, event) in calendar.items():
print(date+':')
for i in enumerate(event):
print(' '+str(i[0])+': '+i[1])
Выход:
2015-10-29:
0: Python class
1: Change oil in blue car
2015-10-12:
0: Eye doctor
1: lunch with sid
О том, почему я это делаю:
for i in enumerate(event):
print(' '+str(i[0])+': '+i[1])
Как вы можете видеть, я использую enumerate()
функцию здесь. Из документа:
Возврат объекта перечисления. iterable должна быть последовательностью, итератором или некоторым другим объектом, который поддерживает итерацию.
Метод итератора __next__()
, возвращаемый enumerate()
, возвращает кортеж, содержащий счетчик (от начала, который по умолчанию равен 0), и значения, полученные от итерации по итерируемому.
Так он будет возвращать что-то вроде [(0, 'Python class'), (1, 'Eye doctor'), (2, 'lunch with sid')]
если evernt
является ['Python class', 'Eye doctor', 'lunch with sid']
.
Теперь мы имеем [(0, 'Python class'), (1, 'Eye doctor'), (2, 'lunch with sid')]
, когда мы используем for
петлю на него, как for i in enumerate(event)
, i
будет (0, 'Python class')
в первом цикле, и (1, 'Eye doctor')
на втором цикле и т.д.
И затем, если вы хотите напечатать что-нибудь например, 0: Python class
(есть некоторые пробелы перед укусом), нам нужно вручную помещать пробелы, как ' '+
(+
может присоединиться к строкам здесь, например, 'foo'+'bar'
- foobar
).
Тогда, потому что i
является кортежем, я использую slice
. i[0]
может получить первый элемент в этом кортеже, i[1]
может получить второй и т. Д.
Потому что i[0]
является целым числом, и мы не можем просто сделать что-то вроде 0 + 'foobar'
(поднимем TypeError: unsupported operand type(s) for +: 'int' and 'str'
). Поэтому нам нужно использовать функцию str()
, чтобы скрыть ее до строки. А потом ... может быть, вы поймете.
Также вы можете сделать что-то вроде:
for num, event in enumerate(event):
print(' '+str(num), event, sep=': ')
Более ясное? for num, event in enumerate(event)
даст что-то вроде num = 0, evert = 'Python class'
в первом цикле и ... как я уже сказал.
О sep
, вы можете проверить the document для получения более подробной информации.
эй это работало очень хорошо, но я просто хотел прояснить что-то для моего понимания. когда u перебирает цикл for через i в перечислении (событие). как str (i [0]) и + i [1], первые 1 добавляют числа, чтобы перечислить список (str (i [0]), а второй i [1] получает все события, которые я просто не использовал, я знаю, как это взаимодействие работает, потому что я хочу иметь возможность удалять что-то из списка, поэтому я пытаюсь понять, что мне нужно будет получить, чтобы удалить конкретную запись в заданную дату – Sinoda
более конкретно, почему вы положили [ 0] и [1] в скобках, что делает точно – Sinoda
@ Синода, которую я отредактировал :) (кажется, немного длинный: P) –