打印两个相关列表

问题描述 投票:0回答:1

我有一个无法解决的问题。 我有两个包含相关信息的列表。列表结构如下:

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 循环进行了尝试,但它要么导致错误,要么我得到第一个列表的第一个项目,然后是第二个列表的所有项目,最后是第一个列表的所有项目.

有没有人有好的办法解决这个问题?

python list loops for-loop nested-loops
1个回答
0
投票

假设两个列表按元组中的第一个数字排序,并且两个列表之间至少有一个匹配项:

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
© www.soinside.com 2019 - 2024. All rights reserved.