我有一个无法解决的问题。 我有两个包含相关信息的列表。列表结构如下:
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 循环进行了尝试,但它要么导致错误,要么我得到第一个列表的第一个项目,然后是第二个列表的所有项目,最后是第一个列表的所有项目.
有没有人有好的办法解决这个问题?
假设两个列表按元组中的第一个数字排序,并且两个列表之间至少有一个匹配项:
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