提问人:VirreJoj 提问时间:11/9/2023 最后编辑:mozwayVirreJoj 更新时间:11/9/2023 访问量:37
打印两个相关列表
Printing two related lists
问:
我有一个我无法解决的问题。 我有两个包含相关信息的列表。列表结构如下:
List_a = [(id_nr, date, event), (...)]
List_b = [(id_nr, Item, price), (...), (...)]
List_b中可以有许多项目通过 ID nr 与 List_a中的项目相关联。所以信息可以看起来像这样
List_a = [(1, '2023-01-01', 'Groceries'), (2, '2023-01-02', 'IKEA')]
List_b = [(1, 'Bread', 20), (1, 'Milk', 10), (2, 'Chair', 125), (2, 'Sofa', 230), (2, 'Bed', 340)]
我想要的是让这些打印成这样:
1, 2023-01-01, Groceries
1, Bread, 20
1, Milk, 10
2, 2023-01-02, IKEA
2, Chair, 125
2, Sofa, 230
2, Bed, 340
我尝试过嵌套的for循环,例如:
For a in List_a:
Print((a[0], a[1], a[2]))
For b in List_b
Print((b[0], b[1], b[2]))
我也尝试过在代码中使用 while 循环,但它要么导致错误,要么我得到第一个列表的第一项,然后是第二个列表的所有项目,最后是第一个列表的所有项目。
有没有人有解决这个问题的好方法?
答:
0赞
mozway
11/9/2023
#1
假设两个列表按元组中的第一个数字排序,并且两个列表之间至少有一个匹配项:
List_a = [(1, '2023-01-01', 'Groceries'), (2, '2023-01-02', 'IKEA')]
List_b = [(1, 'Bread', 20), (1, 'Milk', 10), (2, 'Chair', 125), (2, 'Sofa', 230), (2, 'Bed', 340)]
idx = 0
for tup in List_a:
print(*tup, sep=', ')
while idx < len(List_b) and List_b[idx][0] == tup[0]:
print(*List_b[idx], sep=', ')
idx += 1
如果 List_b 不一定按 id 排序或分组,则首先在按元组的第一个值索引的字典中收集匹配的元组:
dic_b = {}
for t in List_b:
dic_b.setdefault(t[0], []).append(t)
idx = 0
for tup in List_a:
print(*tup, sep=', ')
for t in dic_b.get(tup[0], []):
print(*t, sep=', ')
输出:
1, 2023-01-01, Groceries
1, Bread, 20
1, Milk, 10
2, 2023-01-02, IKEA
2, Chair, 125
2, Sofa, 230
2, Bed, 340
上一个:嵌套循环计数难题 [已关闭]
下一个:执行多次求和
评论