如何在打印前排序JSON浮点型金额数据?TypeError报错解决
解决TypeError: 'float' object is not iterable问题
你的问题出在对单个浮点值调用sorted()函数上,我来帮你理清楚问题所在:
- 当你遍历
data['NotAdmin']时,每个c都是一个完整的用户字典,比如{ "money": 200.0, "name": "Sam", "password": "1234" } c["money"]是单个的浮点数值(比如200.0),但sorted()函数要求传入可迭代对象(比如列表、元组这类能逐个遍历的集合),直接传单个float自然会触发迭代错误。
方案1:仅提取并排序所有金额值
如果你只需要得到排序后的金额列表,可以先把所有用户的money值收集到一个列表里,再进行排序:
import json with open("cash.json", "r", encoding="utf-8") as f: data = json.load(f) # 提取NotAdmin组所有用户的金额到列表 money_list = [user["money"] for user in data['NotAdmin']] # 对金额列表排序 sorted_money = sorted(money_list) print(sorted_money)
运行后会输出:[100.0, 150.0, 200.0]
方案2:按金额排序用户(保留完整信息)
如果想保留用户的姓名、密码等信息,同时按金额排序,可以直接对NotAdmin用户列表排序,用key参数指定按money字段排序:
import json with open("cash.json", "r", encoding="utf-8") as f: data = json.load(f) # 按金额升序排序用户列表 sorted_users = sorted(data['NotAdmin'], key=lambda x: x["money"]) # 遍历输出排序后的用户信息(也可以只输出金额) for user in sorted_users: print(f"姓名: {user['name']}, 金额: {user['money']}")
运行后输出:
姓名: Ali, 金额: 100.0 姓名: Jasmin, 金额: 150.0 姓名: Sam, 金额: 200.0
如果需要降序排序,只需给sorted()添加reverse=True参数:
sorted_users = sorted(data['NotAdmin'], key=lambda x: x["money"], reverse=True)
内容的提问来源于stack exchange,提问作者sadiq ali
相关产品推荐
相关产品推荐

