如何按关联id_nr打印两个相关Python列表的内容?
解决方法
你的问题出在嵌套循环里没做id匹配判断,每次遍历List_a的项后直接输出了整个List_b,导致结果不符合预期。这里给你两种可行的解决办法:
方法一:改进嵌套循环(简单直接)
在内部循环中增加id匹配的判断,只输出和当前List_a项id一致的List_b内容:
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)] for a in List_a: # 输出List_a当前条目 print(f"{a[0]}, {a[1]}, {a[2]}") # 仅输出与当前id匹配的List_b条目 for b in List_b: if b[0] == a[0]: print(f"{b[0]}, {b[1]}, {b[2]}")
方法二:先分组List_b(适合大数据量)
如果List_b的数据量很大,嵌套循环的效率会偏低。可以先把List_b按id分组存储,之后直接通过id调取对应内容:
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)] # 用defaultdict按id分组List_b from collections import defaultdict b_grouped = defaultdict(list) for b in List_b: b_grouped[b[0]].append(b) # 遍历输出 for a in List_a: print(f"{a[0]}, {a[1]}, {a[2]}") # 取出当前id对应的所有List_b条目并输出 for b in b_grouped.get(a[0], []): print(f"{b[0]}, {b[1]}, {b[2]}")
两种方法运行后都会输出你需要的格式:
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
内容的提问来源于stack exchange,提问作者VirreJoj
相关产品推荐
相关产品推荐

