【问题标题】:comparing tuples/dictionary python [closed]比较元组/字典 python [关闭]
【发布时间】:2014-02-20 16:37:47
【问题描述】:

我有一个 txt 文件,如下所示。我正在编写一个简单的程序(虽然显然不适合我),它在命令行(通过 sys.argv[1])获取日期,如果日期 早于文件下方的日期,则下载文件。基本上,我比较日期,如果文件旁边的日期较新,那么文件可能会使用 wget 自动下载。我想知道我应该如何构建这种类型的比较?我应该用文件和日期 {63337454-part002.csv.gz : 2014-01-28}、集合还是元组列表制作字典?我可以创建其中任何一个,这是我真正苦苦挣扎的比较。任何帮助将非常感激。非常感谢。

63337454-part002.csv.gz

2014-01-28

63337454-part001.csv.gz

2014-01-28

63193394-part002.csv.gz

2014-01-25

63193394-part001.csv.gz

2014-01-25

63147949-part002.csv.gz

2014-01-24

63147949-part001.csv.gz

2014-01-24

【问题讨论】:

  • 你的日期总是写成yyyy-mm-dd吗?因为那会很棒。
  • 是的,日期就是这种格式。

标签: python list dictionary set list-comprehension


【解决方案1】:

假设文件名是唯一的,而日期不是,我会创建一个文件名字典到日期并使用列表理解

[f for (f, d) in files_dict.items() if d < reference_date] 

(请注意,这只是我如何去做的一个例子,并不是一个完整的解决方案)

如果您将日期解析为 datetime.date 并将其用作值(而不是原始字符串),则比较将更容易处理。

【讨论】:

    【解决方案2】:

    如果您有大量此类一对一关系,则应该使用适当的数据库。

    否则,一个 2 元组序列就足够了。对于额外的信用,您可以按日期(升序)对它们进行排序,以便您可以将所有内容都记录到目标日期。

    s = """
    #that string you posted
    """
    
    li = [x for x in s.splitlines() if x]
    
    tups = [tuple(li[i:i+2]) for i in range(0, len(li), 2)]
    
    tups.sort(key=lambda x: x[1]) #or key=operator.itemgetter(1)
    
    tups
    Out[44]: 
    [('63147949-part002.csv.gz', '2014-01-24'),
     ('63147949-part001.csv.gz', '2014-01-24'),
     ('63193394-part002.csv.gz', '2014-01-25'),
     ('63193394-part001.csv.gz', '2014-01-25'),
     ('63337454-part002.csv.gz', '2014-01-28'),
     ('63337454-part001.csv.gz', '2014-01-28')]
    
    from itertools import takewhile
    
    list(takewhile(lambda x: x[1] < '2014-01-28',tups))
    Out[47]: 
    [('63147949-part002.csv.gz', '2014-01-24'),
     ('63147949-part001.csv.gz', '2014-01-24'),
     ('63193394-part002.csv.gz', '2014-01-25'),
     ('63193394-part001.csv.gz', '2014-01-25')]
    

    以上几点说明:

    • 您可以安全地按字典顺序比较日期字符串,因为日期采用 ISO 8601 格式
    • 如果您要多次执行此操作,首先按日期排序可以节省一点时间。然后您就知道,一旦过了目标日期,您就不需要再看。

    【讨论】:

    • 该死的温馨谢谢。我需要进行排序,尤其是了解不同的排序算法。
    猜你喜欢
    • 1970-01-01
    • 2019-01-03
    • 2022-12-17
    • 2019-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-09
    • 1970-01-01
    相关资源
    最近更新 更多