Python3:基于成员ID列表与已有字典生成各团队专属字典
没问题,这其实是Python里很常见的字典筛选需求,几种方法都能轻松实现,我给你整理了几个实用的方案:
先把你的原始数据放在这里方便参考:
team_A = [1,2,3,4,5] team_B = [6,7,8,9,10] team_C = [11,12,13,14,15] dictionary = {5:23, 10:68, 15:68, 4:1, 9:37, 14:21, 3:987, 8:3, 13:14, 2:98, 7:74, 12:47, 1:37, 6:82, 11:99}
方法1:字典推导式(推荐,简洁高效)
这是Python里最优雅的写法,一行代码就能搞定,可读性和效率都很高:
team_A_values = {k: v for k, v in dictionary.items() if k in team_A} team_B_values = {k: v for k, v in dictionary.items() if k in team_B} team_C_values = {k: v for k, v in dictionary.items() if k in team_C}
解释一下:咱们遍历原始字典的每一个键值对,只保留那些键存在于对应团队ID列表的项,直接生成新的专属字典。运行后team_A_values就会得到你想要的{5:23, 4:1, 3:987, 2:98, 1:37}。
方法2:基础循环遍历(适合新手理解逻辑)
如果刚接触Python,想更清晰地看到每一步的操作,可以用循环来实现:
team_A_values = {} for key, value in dictionary.items(): if key in team_A: team_A_values[key] = value
这个逻辑很直观:先创建一个空字典,然后逐个检查原始字典的键,如果这个键在团队A的ID列表里,就把对应的键值对添加到新字典里。其他团队的写法完全一样,只需要把team_A换成team_B或team_C就行。
小优化:把列表转成集合提升效率
如果你的团队ID列表特别长(比如有成百上千个ID),建议先把列表转换成集合,因为Python里检查元素是否在集合里的速度比列表快很多:
team_A_set = set(team_A) team_A_values = {k: v for k, v in dictionary.items() if k in team_A_set}
这个小改动在数据量大的时候能明显提升运行速度,平时用列表也没问题,只是给你个进阶小技巧~
内容的提问来源于stack exchange,提问作者galanonim
相关产品推荐
相关产品推荐

