比较元组/字典python
我有一个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比较元组/字典python,python,list,dictionary,set,list-comprehension,Python,List,Dictionary,Set,List Comprehension,我有一个txt文件,如下所示。我正在编写一个简单的程序(虽然显然不是为我编写的),它在命令行(通过sys.argv[1])上获取一个日期,如果该日期 早于文件下面的日期,则文件将被下载。基本上,我比较日期,如果文件旁边的日期较新,那么文件可能会使用wget自动下载。我想知道我应该如何组织这种比较?我应该用文件和日期{63337454-part002.csv.gz:2014-01-28}、集合或元组列表制作词典吗?我可以创造其中任何一个,这是我真正挣扎的比较。任何帮助都将不胜感激。非常感谢 633
2014-01-24假设文件名是唯一的,而日期不是唯一的,我会制作一个文件名到日期的字典,并使用一个列表来理解
[f for (f, d) in files_dict.items() if d < reference_date]
[f表示文件中的(f,d)\u dict.items()如果d
(请注意,这只是我将如何着手的一个示例,并不打算成为一个完整的解决方案)
如果将日期解析为datetime.date并将其用作值(而不是原始字符串),则比较将更容易处理 假设文件名是唯一的,而日期不是唯一的,我会制作一个文件名到日期的字典,并使用一个列表来理解
[f for (f, d) in files_dict.items() if d < reference_date]
[f表示文件中的(f,d)\u dict.items()如果d
(请注意,这只是我将如何着手的一个示例,并不打算成为一个完整的解决方案)
如果将日期解析为datetime.date并将其用作值(而不是原始字符串),则比较将更容易处理 假设文件名是唯一的,而日期不是唯一的,我会制作一个文件名到日期的字典,并使用一个列表来理解
[f for (f, d) in files_dict.items() if d < reference_date]
[f表示文件中的(f,d)\u dict.items()如果d
(请注意,这只是我将如何着手的一个示例,并不打算成为一个完整的解决方案)
如果将日期解析为datetime.date并将其用作值(而不是原始字符串),则比较将更容易处理 假设文件名是唯一的,而日期不是唯一的,我会制作一个文件名到日期的字典,并使用一个列表来理解
[f for (f, d) in files_dict.items() if d < reference_date]
[f表示文件中的(f,d)\u dict.items()如果d
(请注意,这只是我将如何着手的一个示例,并不打算成为一个完整的解决方案)
如果将日期解析为datetime.date并将其用作值(而不是原始字符串),则比较将更容易处理 如果你有大量这样的1对1关系,你应该使用一个合适的数据库 否则,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')]
s=”“”
#你贴的那条线
"""
li=[x代表s.splitlines()中的x如果x]
tups=[tuple(li[i:i+2]),用于范围(0,len(li),2)内的i)
tups.sort(key=lambda x:x[1])#或key=operator.itemgetter(1)
塔普斯
出[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')]
从itertools导入takewhile
列表(takewhile(lambda x:x[1]<'2014-01-28',tups))
出[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')]
关于上述内容的一些说明:
- 您可以按字典顺序安全地比较日期字符串,因为日期的格式是
- 如果您通过按日期排序多次执行此操作,则可以节省一点时间。然后你就知道一旦你过了目标日期,你就不需要再看了
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')]
s=”“”
#你贴的那条线
"""
li=[x代表s.splitlines()中的x如果x]
tups=[tuple(li[i:i+2]),用于范围(0,len(li),2)内的i)
tups.sort(key=lambda x:x[1])#或key=operator.itemgetter(1)
塔普斯
出[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')]
从itertools导入takewhile
列表(takewhile(lambda x:x[1]<'2014-01-28',tups))
出[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')]
关于上述内容的一些说明:
- 您可以按字典顺序安全地比较日期字符串,因为日期的格式是
- 如果您通过按日期排序多次执行此操作,则可以节省一点时间。然后你就知道一旦你过了目标日期,你就不需要再看了
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')]
s=”“”
#你贴的那条线
"""
li=[x