【问题标题】:Sort Multiple Lists by 8 Digit Datestring按 8 位日期字符串对多个列表进行排序
【发布时间】:2021-12-14 21:22:03
【问题描述】:

我有 4 个需要按日期排序的列表。一个列表包含文件日期,其他关于文件名的信息如何不带扩展名、大小和最后一个带扩展名。现在我想对排序后的列表和与条目编号匹配的其他列表进行排序。我尝试使用 Zip the Listst 然后排序,但这根本不起作用。

Datestring 列表具有日期条目,例如:

20200329 20200719 20200804 20200919

这是我的代码,它是如何不工作的。我错过了什么吗?

# ls = []   # loaded filelist
# fs = []   # filename list
# ps = []   # filetype list
# ts = []   # fliedate list

f = open(sys.argv[4], "w")
AB = zip(ts,fs,ps,fz)
AB.sort()
ts[:] = [t[0] for t in AB]
fs[:] = [t[1] for t in AB]
ps[:] = [t[2] for t in AB]
fz[:] = [t[3] for t in AB]

【问题讨论】:

  • 你能提供样本数据吗? zip() 函数返回一个迭代器,而不是一个列表,但是您正在调用 sort 方法,这不是对 zip 对象的有效操作。
  • 您可以从 8 个字符串创建日期时间对象。之后python内置的排序功能可以对它们进行排序。
  • 您使用单独的列表而不是字典或其他将相关项目组合在一起的数据结构的任何特殊原因?
  • 你正在做的应该工作。你能发布一些示例数据来展示你得到了什么吗?

标签: python list python-2.7 sorting datetime


【解决方案1】:

我会假设您的日期字符串是正确的日期时间对象,尽管这仍然适用于字符串 ["20200329", "20200719", "20200804", "20200919"]:

ts, fs, ps, fz = zip(*sorted(zip(ts, fs, ps, fz)))

演示:

In [4]: ts = ["20200719", "20200804", "20200919", "20200329"]
   ...: fs = ["fs719", "fs804", "fs919", "fs329"]
   ...: ps = ["ps719", "ps804", "ps919", "ps329"]
   ...: fz = ["fz719", "fz804", "fz919", "fz329"]

In [5]: ts, fs, ps, fz = zip(*sorted(zip(ts, fs, ps, fz)))

In [6]: ts
Out[6]: ('20200329', '20200719', '20200804', '20200919')

In [7]: fs
Out[7]: ('fs329', 'fs719', 'fs804', 'fs919')

In [8]: ps
Out[8]: ('ps329', 'ps719', 'ps804', 'ps919')

In [9]: fz
Out[9]: ('fz329', 'fz719', 'fz804', 'fz919')

【讨论】:

  • 不得不说我需要这个用于 Python 2.7 ts, fs, ps, fz = [*zip(*sorted(zip(ts, fs, ps, fz)))] ^ SyntaxError: invalid语法
  • 这在 2.7 中不起作用吗?我没有要测试的 2.7 安装。
  • 伤心,使用 Python 3 解决方案给了我无效的语法和列表(...返回所有以下代码的无效语法.. File "F:\GP\C64\BBS\Ud-File- reverser-Python\createdirlist.py",第 148 行 ts, fs, ps, fz = [*zip(*sorted(zip(ts, fs, ps, fz)))] ^ SyntaxError: invalid syntax using.... list (zip(sorted(zip(ts, fs, ps, fz))) 文件“F:\GP\C64\BBS\Ud-File-reverser-Python\createdirlist.py”,第 152 行,x 在范围内(len( ls)): ^ SyntaxError: 无效语法
  • 查看我的编辑@MarioKeulertz
  • 现在代码设计不会返回错误,而是在运行时返回“ValueError:要解压的值太多”。每个列表包含 1149 个条目。
猜你喜欢
  • 2018-07-07
  • 2021-12-18
  • 1970-01-01
  • 1970-01-01
  • 2021-06-10
  • 2020-11-11
  • 2016-04-04
  • 2018-04-27
  • 2020-06-02
相关资源
最近更新 更多