我约会时发生的事件发生在日期.我想在显示日历时枚举事件列表.
此外,我需要能够从列表中删除一个事件.
def command_add(date, event, calendar):
if date not in calendar:
calendar[date] = list()
calendar[date].append(event)
calendar = {}
command_add("2015-10-29", "Python class", calendar)
command_add("2015-10-12", "Eye doctor", calendar)
command_add("2015-10-12", "lunch with sid", calendar)
command_add("2015-10-29", "Change oil in blue car", calendar)
print(calendar)
def command_show(calendar):
for (date, event) in calendar:
print(date, enumerate(event))
command_show(calendar)
我以为这会让我访问日期下的辅助列表并枚举它但我收到错误.
示例:
command_show(calendar)
2015-10-20:
0: stackover flow sign up
2015-11-01:
0: * post
1: banned from stack overflow
解决方法:
只需将command_show()函数更改为此,如果不使用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()
功能.从文件:
Return an enumerate object. iterable must be a sequence, an iterator, or some other object which supports iteration.
The__next__()
method of the iterator returned byenumerate()
returns a tuple containing a count (from start which defaults to 0) and the values obtained from iterating over iterable.
所以它会返回类似[(0,’Python类’),(1,’眼科医生’),(2,’午餐与sid’)的东西,如果永远是[‘Python类’,’眼科医生’, ‘与sid共进午餐’].
现在我们有[(0,’Python类’),(1,’眼科医生’),(2,’午餐与sid’)],当我们使用for循环就像我在枚举(事件),我在第一个循环中将是(0,’Python类’),在第二个循环中将是(1,’Eye doctor’)等.
然后,如果你想打印像0这样的东西:Python类(在sting前面有一些空格),我们需要手动放置像”这样的空格(例如,可以在这里连接字符串,’foo”bar’是foobar).
然后,因为我是一个元组,我使用的是slice
. i [0]可以获得该元组中的第一个元素,i [1]可以获得第二个元素,等等.
因为i [0]是一个整数,我们不能只做0’foobar'(将引发TypeError:不支持的操作数类型:’int’和’str’).所以我们需要使用str()函数将其转换为字符串.然后……也许你会明白的.
你也可以这样做:
for num, event in enumerate(event):
print(' '+str(num), event, sep=': ')
更清晰?对于num,enumerate(event)中的事件将在第一个循环中给出类似num = 0,evert =’Python class’的内容,并且……正如我所说的那样.
关于sep,您可以查看the document了解更多详情.