【问题标题】:Collecting a range of keys from a dictionary从字典中收集一系列键
【发布时间】:2013-05-25 15:11:47
【问题描述】:

我被难住了。我有一个 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)

我可以看到这看起来不对,我觉得我需要 *for dates in range(date_from, date_to)* 但我不知道如何让它像这样遍历字典键。

【问题讨论】:

    标签: for-loop dictionary python-3.x range


    【解决方案1】:

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

    for day in range(date_from, date_to + 1):
        if day in t:
            print day, t[day]
    

    注意range() 生成的值确实包含终点,所以我使用date_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)
    

    【讨论】:

    • 非常感谢!我让它与ints和pprint一起工作。现在让日期时间参与进来......
    猜你喜欢
    • 1970-01-01
    • 2010-11-18
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-15
    • 1970-01-01
    相关资源
    最近更新 更多