python - 如何在打印之前对 JSON float 据进行排序

标签 python python-3.x dictionary

我正在尝试获取 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(或就地修改iterablesort函数)的工作方式是采用一个iterable 并对每个元素应用“评估”函数,以便对它们进行排序。该函数可以在key参数下传入,或者如果不传入,Python将自动决定如何对元素进行排序。

要将其应用到我们的代码中,我们需要获取 data["NotAdmin"] 列表并使用 key 应用 .sort 方法 code> 选择每个字典的 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/

相关文章:

python-3.x - 解释 GTK+3.0 上的 Drag 'n Drop 是如何工作的

python - 赋值前引用的局部变量 - 错误

scala - 保留插入顺序的不可变 Scala Map 实现

python - 在 Kivy 中构建一个简单的进度条或加载动画?

python - "accuracy"的 Caffe 自定义 python 层

python - 计算两个日期之间的年+月+天?

python-3.x - 在 Google Colab 中使用笔记本电脑网络摄像头进行实时 YOLO 对象检测

Python - 创建循环遍历嵌套列表的字典列表

Python 2.6 TreeMap/SortedDictionary?

python - 在python中使用cmap对单 channel png进行imread时如何抑制重新缩放?