我正在尝试获取 JSON 文件中的数据,但在打印之前,我想对 money
进行排序。这是我的代码
with open("cash.json", "r", encoding="utf-8") as f:
data = json.load(f)
for c in data['NotAdmin']:
a_new_list = sorted(c["money"])
print(a_new_list)
这是我的 cash.json
文件中的内容
{
"NotAdmin": [
{
"money": 200.0,
"name": "Sam",
"password": "1234"
}, {
"money": 150.0,
"name": "Jasmin",
"password": "1573"
}, {
"money": 100.0,
"name": "Ali",
"password": "1856"
}
],
"admin": [
{
"name": "Adam",
"password": "6767"
}, {
"name": "Eva",
"password": "2222"
}
]
}
我不断收到此错误TypeError:'float'对象不可迭代
最佳答案
您收到 TypeError
的原因是您正在迭代 NotAdmin
list
中的 dictionaries
> 并尝试将 sorted
函数应用于 money
属性。当您尝试“排序”float
(?)时,这显然会失败。
因此,sorted
(或就地修改iterable
的sort
函数)的工作方式是采用一个iterable
并对每个元素应用“评估”函数,以便对它们进行排序。该函数可以在key
参数下传入,或者如果不传入,Python将自动决定如何对元素进行排序。
要将其应用到我们的代码中,我们需要获取 data["NotAdmin"]
列表并使用 key 应用
code> 选择每个字典的 .sort
方法money
属性。我们可以使用(匿名)lambda
函数来做到这一点。
所以,这是完整的代码:
with open("cash.json", "r", encoding="utf-8") as f:
data = json.load(f)
data["NotAdmin"].sort(key = lambda d: d["money"])
print(data)
输出:
{'admin': [{'password': '6767', 'name': 'Adam'}, {'password': '2222', 'name': 'Eva'}], 'NotAdmin': [{'password': '1856', 'money': 100.0, 'name': 'Ali'}, {'password': '1573', 'money': 150.0, 'name': 'Jasmin'}, {'password': '1234', 'money': 200.0, 'name': 'Sam'}]}
此外,如果您想按降序排列元素,那么我们可以看一下 the documentation并看到我们可以将 reverse
标志设置为 True
。
这只会将该行更改为:
...
...
data["NotAdmin"].sort(key = lambda d: d["money"], reverse = True)
...
关于python - 如何在打印之前对 JSON float 据进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48050695/