我在nested list
中有一个list
。在第一个嵌套列表中,它具有dates
,在第二个嵌套列表中,它具有与日期对应的values
。我需要在嵌套列表中对日期进行排序。根据日期,应该对相应的值进行排序。我知道sorted(list)
有用。但是我不知道如何根据value
对嵌套的date
列表进行排序。我希望date
类型位于string
中,而不是date
中。为我提供一些解决方案。
以下是列表:
a = [["2019-10-13","2019-10-12","2019-10-14","2019-10-11"],[10,28,5,37]]
需要输出
a = [["2019-10-11","2019-10-12","2019-10-13","2019-10-14"],[37,28,10,5]]
答案 0 :(得分:2)
单行解决方案:
A VirtualBox machine with the name 'petalandstem' already exists.
Please use another name or delete the machine with the existing
name, and try again.
说明:
list(zip(*sorted(zip(*a), key=lambda x: x[0])))
将每个日期与其值配对zip(*a)
是用于排序的函数,key
是传递的单个参数-在我们的例子中是一对,我们使用x
获取日期)结果:
x[0]
编辑:我已完全阅读您的问题并进行了更改。我以为您是按值排序日期,而不是相反。现在是正确的(结果相同)。
答案 1 :(得分:1)
这不是单线的,但对于pandas
是他们的首选的人:
import pandas as pd
a = [["2019-10-13","2019-10-12","2019-10-14","2019-10-11"],[10,28,5,37]]
df = pd.DataFrame({'dates': a[0], 'values':a[1]}).sort_values('dates')
b = [df['dates'].tolist()] + [df['values'].tolist()]
print(b)
这保留了您问题中的[[list], [list]]
结构。
[['2019-10-11', '2019-10-12', '2019-10-13', '2019-10-14'], [37, 28, 10, 5]]
答案 2 :(得分:0)
压缩两个列表,然后对其进行排序:
a = zip(["2019-10-13","2019-10-12","2019-10-14","2019-10-11"],[10,28,5,37])
排序后的结果将是:
>>> sorted(a)
[('2019-10-11', 37), ('2019-10-12', 28), ('2019-10-13', 10), ('2019-10-14', 5)]
将排序后的列表分配给变量,然后将其解压缩:
>>> a = sorted(a)
>>> list(zip(*a))
[('2019-10-11', '2019-10-12', '2019-10-13', '2019-10-14'), (37, 28, 10, 5)]
答案 3 :(得分:0)
如果您的日期格式可能是可变的,并且基于日期的字符串表示形式的排序可能不会产生所需的效果,则使用日期时间库之一(直接或例如通过熊猫)是有效的更准确的。
它不是单线的,但可能更强大:
a = [["2019-10-13", "2019-10-12", "2019-10-14", "2019-10-11"], [10, 28, 5, 37]]
df = (
pd.DataFrame(a, index=["date", "value"])
.T.astype({"date": "datetime64", "value": "int"})
.sort_values("date")
)
df["date"] = df["date"].apply(lambda x: str(x.date())) # date as strings
output = [list(col) for col in df.T.values]
这将提供所需的输出作为嵌套列表:
[['2019-10-11', '2019-10-12', '2019-10-13', '2019-10-14'], [37, 28, 10, 5]]