For loop 从字典中收集一系列键

For loop 从字典中收集一系列键,for-loop,dictionary,python-3.x,range,For Loop,Dictionary,Python 3.x,Range,我被难住了。我有一个Timesheet类,它在一个名为self.Timesheet的字典中保存工作日,日期作为键,小时数作为值。我正在尝试编写一个函数,可以显示用户定义的日期范围内的所有条目 现在让我们假设关键日期是简单的整数20-25。我试过了,但什么也没用。没有错误,什么都没有 def show_days(self): date_from = input("From date: ") date_to = input("To date: ") t = self.time

我被难住了。我有一个Timesheet类,它在一个名为self.Timesheet的字典中保存工作日,日期作为键,小时数作为值。我正在尝试编写一个函数,可以显示用户定义的日期范围内的所有条目

现在让我们假设关键日期是简单的整数20-25。我试过了,但什么也没用。没有错误,什么都没有

def show_days(self):
    date_from = input("From date: ")
    date_to = input("To date: ")
    t = self.timesheet

    for dates in t[date]:
        range(date_from, date to)
        print(dates)

我可以看出这看起来不对,我觉得我需要*范围内的日期(date_from,date_to)*,但我不知道如何让它像那样在字典键上循环。

您需要循环范围,然后检查该键是否在字典中:

for day in range(date_from, date_to + 1):
    if day in t:
        print day, t[day]
请注意,
range()
生成的值不包括终点,因此我使用了
date\u to+1
来确保它也包括在内

如果您的键不是整数,而是,比如说,
datetime.date
对象,则必须使用
datetime.timedelta()
构造某种循环,以迭代两个值之间的所有日期:

date = date_from = datetime.date(2012, 1, 15)
date_to = datetime.date(2012, 3, 12)

while date <= date_to:
    if date in t:
        print date, t[date]
    date += datetime.timedelta(days=1)
date=date\u from=datetime.date(2012年1月15日)
date_to=日期时间日期(2012年3月12日)

非常感谢!我让它与int和pprint一起工作。现在让datetime参与进来。。。