操作列表列表
Manipulating List of Lists
我有 3 个列表;其中一个名称,一个数据和一个日期,我将在下面打印一个示例(实际数据集要大得多,我第一次在这里问)
List1 = [[Ref1,Ref2,Ref3],[Ref1,Ref2,Ref3,Ref4],[Ref2,Ref3]]
List2 = [[1,2,3],[1.1,2.1,3.1,4.1],[2.2,3.2]]
List3 = [2020,2019,2021]
我已经设法操纵数据使列表的顺序相互匹配。我需要做的是为每个 Refx 创建图表,y 轴为 List 2,x 轴为 List 3。
我想按日期顺序为每个 Refx 提供单独的列表,例如:
Ref1 = [1.1,1]
Ref2 = [2.1,2,2.2]
Ref3 = [3.1,3,3.2]
Ref4 = [4.1]
dates = [2019,2020,2021]
然后我可以轻松地绘制每个 Refx
一些建议会很棒...
以下代码将帮助您解决问题。
Ref1, Ref2, Ref3, Ref4 = [], [], [], []
Refs = [Ref1, Ref2, Ref3, Ref4]
List1 = [[Ref1, Ref2, Ref3], [Ref1, Ref2, Ref3, Ref4], [Ref2, Ref3]]
List2 = [[1, 2, 3], [1.1, 2.1, 3.1, 4.1], [2.2, 3.2]]
List3 = [2020, 2019, 2021]
for i in range(len(List1)):
for j in range(len(List1[i])):
List1[i][j].append((List3[i], List2[i][j]))
for r in Refs:
r.sort(key=lambda x: x[0])
Ref1 = [i[1] for i in Ref1]
Ref2 = [i[1] for i in Ref2]
Ref3 = [i[1] for i in Ref3]
Ref4 = [i[1] for i in Ref4]
print(Ref1)
print(Ref2)
print(Ref3)
print(Ref4)
结果:
[1.1, 1]
[2.1, 2, 2.2]
[3.1, 3, 3.2]
[4.1]
此答案会将数据重组为字典,这与您在问题中要求的内容略有不同,但也可能有所帮助:
List1 = [["Ref1", "Ref2", "Ref3"], ["Ref1", "Ref2", "Ref3", "Ref4"], ["Ref2", "Ref3"]]
List2 = [[1, 2, 3], [1.1, 2.1, 3.1, 4.1], [2.2, 3.2]]
List3 = [2020, 2019, 2021]
# default dict will allow us accumulating values
from collections import defaultdict
d = defaultdict(list)
# this will iterate in the order sorted by List3 (first arg to zip)
for year, refs_keys, refs_vals in sorted(zip(List3, List1, List2)):
# this is to iterate over the nested lists
for ref_key, ref_val in zip(refs_keys, refs_vals):
d[ref_key].append(ref_val)
d["years"].append(year)
# convert to plain dict (optional)
d = dict(d)
print(d)
我有 3 个列表;其中一个名称,一个数据和一个日期,我将在下面打印一个示例(实际数据集要大得多,我第一次在这里问)
List1 = [[Ref1,Ref2,Ref3],[Ref1,Ref2,Ref3,Ref4],[Ref2,Ref3]]
List2 = [[1,2,3],[1.1,2.1,3.1,4.1],[2.2,3.2]]
List3 = [2020,2019,2021]
我已经设法操纵数据使列表的顺序相互匹配。我需要做的是为每个 Refx 创建图表,y 轴为 List 2,x 轴为 List 3。
我想按日期顺序为每个 Refx 提供单独的列表,例如:
Ref1 = [1.1,1]
Ref2 = [2.1,2,2.2]
Ref3 = [3.1,3,3.2]
Ref4 = [4.1]
dates = [2019,2020,2021]
然后我可以轻松地绘制每个 Refx 一些建议会很棒...
以下代码将帮助您解决问题。
Ref1, Ref2, Ref3, Ref4 = [], [], [], []
Refs = [Ref1, Ref2, Ref3, Ref4]
List1 = [[Ref1, Ref2, Ref3], [Ref1, Ref2, Ref3, Ref4], [Ref2, Ref3]]
List2 = [[1, 2, 3], [1.1, 2.1, 3.1, 4.1], [2.2, 3.2]]
List3 = [2020, 2019, 2021]
for i in range(len(List1)):
for j in range(len(List1[i])):
List1[i][j].append((List3[i], List2[i][j]))
for r in Refs:
r.sort(key=lambda x: x[0])
Ref1 = [i[1] for i in Ref1]
Ref2 = [i[1] for i in Ref2]
Ref3 = [i[1] for i in Ref3]
Ref4 = [i[1] for i in Ref4]
print(Ref1)
print(Ref2)
print(Ref3)
print(Ref4)
结果:
[1.1, 1]
[2.1, 2, 2.2]
[3.1, 3, 3.2]
[4.1]
此答案会将数据重组为字典,这与您在问题中要求的内容略有不同,但也可能有所帮助:
List1 = [["Ref1", "Ref2", "Ref3"], ["Ref1", "Ref2", "Ref3", "Ref4"], ["Ref2", "Ref3"]]
List2 = [[1, 2, 3], [1.1, 2.1, 3.1, 4.1], [2.2, 3.2]]
List3 = [2020, 2019, 2021]
# default dict will allow us accumulating values
from collections import defaultdict
d = defaultdict(list)
# this will iterate in the order sorted by List3 (first arg to zip)
for year, refs_keys, refs_vals in sorted(zip(List3, List1, List2)):
# this is to iterate over the nested lists
for ref_key, ref_val in zip(refs_keys, refs_vals):
d[ref_key].append(ref_val)
d["years"].append(year)
# convert to plain dict (optional)
d = dict(d)
print(d)