如何在Python中将多个键值对列表合并为可转表格的统一结构
实现方案
你之前的代码问题在于字典每个键仅存储单个值,新值会覆盖旧值。修改为每个键对应一个和人员数量等长的列表,按顺序存储对应人员的属性值,无值位置默认填充#N/A即可。
完整实现代码
# 示例输入数据 person1 = [['Name','Alex'], ['Gender','M'], ['Age', 30]] person2 = [['Name','Anna'], ['Gender','F'], ['Phone','1234567'],['Age', 25]] person3 = [['Name','Fred'], ['Gender','M'], ['Age', 33], ['Passport', '987654']] # 统一管理所有人员列表 person_list = [person1, person2, person3] person_total = len(person_list) # 收集所有唯一属性:以下两种方式二选一 # 方式1:手动指定属性顺序,和示例输出顺序一致 all_attributes = ['Name', 'Gender', 'Phone', 'Age', 'Passport'] # 方式2:自动去重排序,无需手动维护属性列表 # all_attributes = sorted({attr for p in person_list for attr, _ in p}) # 初始化结果结构,每个属性默认填充#N/A result = {attr: ['#N/A'] * person_total for attr in all_attributes} # 遍历填充实际属性值 for person_idx, person_attrs in enumerate(person_list): # 把当前人员属性转成字典方便快速查询 current_person = dict(person_attrs) for attr in all_attributes: if attr in current_person: result[attr][person_idx] = current_person[attr] # 格式化输出对齐的表格 max_col_width = max(len(str(item)) for attr in result for item in [attr] + result[attr]) + 3 for attr in result: output_cols = [attr] + result[attr] print('# ' + ''.join(str(col).ljust(max_col_width) for col in output_cols))
运行输出
# Name Alex Anna Fred # Gender M F M # Phone #N/A 1234567 #N/A # Age 30 25 33 # Passport #N/A #N/A 987654
内容的提问来源于stack exchange,提问作者Sergey
相关产品推荐
相关产品推荐

