如何筛选字典中篮球项目的条目并格式化展示
问题:筛选并格式化输出篮球选手信息
我有一个包含8条记录的数据集,该字典由Excel生成的.csv文件创建。我尝试用以下代码筛选result字典中的条目:
import csv #Import a CSV with lines of relevant person's information to a dictionary reader = csv.reader(open('NameGenderSport.csv')) result = {} for row in reader: key = row[0] if key in result: # implement your duplicate row handling here pass result[key] = row[1:] print(result) print(result.items()) parsedData = {k:v for k,v in result.items() if k == "Basketball"} print(parsedData)
当前result字典为:
{'Peter': ['Male', 'Basketball'], 'Carlos': ['Male', 'Tennis'], 'Angela': ['Female', 'Golf'], 'David': ['Male', 'Basketball'], 'Kaitlin': ['Female', 'Golf'], 'Marco': ['Male', 'Tennis'], 'Andrew': ['Male', 'Golf'], 'Carmen': ['Female', 'Basketball']}
我希望输出所有篮球选手的完整信息,格式如下:
Name: Peter Gender: Male Sport: Basketball Name: David Gender: Male Sport: Basketball Name: Carmen Gender: Female Sport: Basketball
请问该如何实现?是否应该使用类或其他方法?
解决方案
1. 修正筛选逻辑并格式化输出
你当前的筛选代码逻辑错误:k == "Basketball"是试图筛选名字为"Basketball"的条目,但实际运动信息存储在每个value的第二个元素(索引为1)中。修改后可以这样实现:
import csv # 读取CSV生成字典 reader = csv.reader(open('NameGenderSport.csv')) result = {} for row in reader: key = row[0] if key in result: # 重复行处理(按需实现) pass result[key] = row[1:] # 筛选篮球选手并格式化输出 for name, info in result.items(): gender, sport = info if sport == "Basketball": print(f"Name: {name}") print(f"Gender: {gender}") print(f"Sport: {sport}\n")
这段代码遍历字典所有键值对,判断当前条目的运动是否为篮球,符合条件的就按指定格式打印,每个选手信息后用空行分隔。
2. 是否需要用类?
如果只是当前简单的筛选和输出需求,完全不需要用类,字典遍历的方式已经足够简洁高效。
但如果后续需要扩展功能(比如给选手添加更多属性、实现复杂的人员管理逻辑、批量操作等),可以考虑定义Athlete类封装数据和行为,示例如下:
class Athlete: def __init__(self, name, gender, sport): self.name = name self.gender = gender self.sport = sport def print_info(self): print(f"Name: {self.name}") print(f"Gender: {self.gender}") print(f"Sport: {self.sport}\n") # 读取CSV并创建Athlete实例列表 athletes = [] reader = csv.reader(open('NameGenderSport.csv')) for row in reader: name, gender, sport = row athletes.append(Athlete(name, gender, sport)) # 筛选并输出篮球选手 for athlete in athletes: if athlete.sport == "Basketball": athlete.print_info()
这种方式代码结构更清晰、扩展性更强,但对于当前简单需求来说属于过度设计,按需选择即可。
内容的提问来源于stack exchange,提问作者bbsmfb
相关产品推荐
相关产品推荐

