解决TypeError(int不可迭代)及按属性末尾值排序人名列表需求
TypeError: argument of type 'int' is not iterable 排查与排序实现
错误原因分析
- 核心错误:代码中
if i in folks[name][6]这一行,folks[name][6]是单个数值(int或float类型),而in操作符要求右侧是可迭代对象(比如列表、字符串),直接对单个整数/浮点数使用in就会触发TypeError: argument of type 'int' is not iterable。 - 其他问题:
- 函数内部直接使用全局变量
folks,而非传入的参数unordered_people,违背函数封装性。 names=[]放在for i in nums:循环内部,每次循环都会清空列表,最终只能保留最后一次匹配的结果。names.append(folks[i])逻辑错误:i是排序后的数值,不是字典的键,应该添加对应的人名name而非folks[i]。- 函数没有返回值,最后
print(generate_prioritized_list(folks))会输出None。
- 函数内部直接使用全局变量
修正后的代码实现
folks = {'Leia': [28, 'F', 'W', False, True, 'Unemployed',1], 'Junipero': [15, 'M', 'E', False, False, 'Teacher', 0.21158336054026594], 'Sunita': [110, 'D', 'E', True, False, 'Business', 0.9834949767416051], 'Issur': [17, 'F', 'O', True, False, 'Service', 0.7599396397686616], 'Luitgard': [0, 'D', 'U', True, True, 'Unemployed', 0.8874638219100845], 'Rudy': [112, 'M', 'W', True, True, 'Tradesperson', 0.6035917636433216], 'Ioudith': [20, 'D', 'W', True, True, 'Medical', 0.24957574519928294], 'Helmi': [109, 'D', 'M', False, False, 'Service', 0.20239906854483214], 'Katerina': [108, 'M', 'W', False, True, 'Student', 0.3046268530221382], 'Durai': [106, 'M', 'U', True, False, 'Business', 0.32332997497778493], 'Euphemios': [83, 'M', 'L', True, True, 'Banker', 0.17369577419188664], 'Lorinda': [8, 'F', 'E', False, True, 'Retail', 0.6667783756618852], 'Lasse': [30, 'D', 'U', True, True, 'Business', 0.6716420300452077], 'Adnan': [117, 'D', 'U', True, False, 'Banker', 0.7043759366238305], 'Pavica': [112, 'F', 'L', False, False, 'Business', 0.5875152728319836], 'Adrastos': [118, 'F', 'L', False, True, 'Service', 0.0660146284846359], 'Kobus': [49, 'D', 'S', False, False, 'Service', 0.4738056051140088], 'Daniel': [115, 'D', 'L', False, True, 'Service', 0.5182765931408372], 'Samantha': [97, 'D', 'W', True, True, 'Medical', 0.07082409148069169], 'Sacagawea': [28, 'F', 'U', True, True, 'Medical', 0.29790328657890996], 'Ixchel': [26, 'F', 'S', False, False, 'Business', 0.22593704520870372], 'Nobutoshi': [31, 'M', 'W', False, True, 'Business', 0.37923896100469956], 'Gorou': [55, 'M', 'B', True, True, 'Banker', 0.8684653864827863], 'Keiko': [34, 'M', 'L', False, True, 'Student', 0.02499269016601946], 'Seong-Su': [1, 'M', 'M', False, True, 'Retail', 0.3214997836868769], 'Aya': [41, 'M', 'B', True, True, 'Teacher', 0.3378161065313626], 'Okan': [11, 'D', 'W', True, True, 'Banker', 0.35535128959244744], 'Mai': [31, 'F', 'M', False, False, 'Service', 0.7072299366468716], 'Chaza-el': [84, 'D', 'E', True, True, 'Teacher', 0.263795143996962], 'Estera': [79, 'M', 'U', True, False, 'Tradesperson', 0.09970175216521693], 'Dante': [82, 'M', 'L', True, False, 'Unemployed', 0.2126494288577333], 'Leofric': [68, 'F', 'B', True, False, 'Unemployed', 0.19591887643941486], 'Anabelle': [63, 'M', 'B', False, False, 'Teacher', 0.3558324357405023], 'Harsha': [119, 'D', 'O', False, True, 'Retail', 0.3359989642837887], 'Dionisia': [92, 'F', 'B', True, False, 'Doctor', 0.42704604164789706], 'Rajesh': [55, 'F', 'M', True, False, 'Doctor', 0.485752225148387], 'Scilla': [60, 'F', 'M', False, False, 'Student', 0.7294089528796434], 'Arsenio': [10, 'D', 'L', False, True, 'Teacher', 0.0819890866210915]} def generate_prioritized_list(unordered_people): # 提取(分数, 人名)对,按分数降序排序 sorted_pairs = sorted( unordered_people.items(), key=lambda x: x[1][6], reverse=True ) # 提取排序后的人名列表 sorted_names = [name for name, details in sorted_pairs] return sorted_names # 获取排序后的列表并打印 result = generate_prioritized_list(folks) for name in result: print(name)
修正说明
- 用
sorted()函数直接对字典项排序,key=lambda x: x[1][6]指定按每个值列表的最后一个元素排序,reverse=True实现降序,这比手动提取分数再匹配的方式更简洁高效。 - 函数使用传入的
unordered_people参数,符合封装原则,复用性更强。 - 直接生成排序后的人名列表并返回,避免了原代码中循环匹配的逻辑错误。
- 最后单独打印结果,避免输出
None。
内容的提问来源于stack exchange,提问作者Peter MacAulay
相关产品推荐
相关产品推荐

