Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较元组/字典python_Python_List_Dictionary_Set_List Comprehension - Fatal编程技术网

比较元组/字典python

比较元组/字典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

我有一个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

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

[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')]
关于上述内容的一些说明:

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

如果你有大量这样的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')]
关于上述内容的一些说明:

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

如果你有大量这样的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