按字典值的值对字典进行排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了按字典值的值对字典进行排序相关的知识,希望对你有一定的参考价值。

我目前有一些看起来像这样的JSON:

{
    "Chile": {
        "num_of_unique_ips": 1,
        "num_of_unique_asns": 1,
        "asns": {
            "AS16629 CTC. CORP S.A. (TELEFONICA EMPRESAS)": 1
        }
    },
    "China": {
        "num_of_unique_ips": 1,
        "num_of_unique_asns": 1,
        "asns": {
            "AS4808 China Unicom Beijing Province Network": 1
        }
    }, # this goes on and on for ever country
}

我通过运行将其转换为字典:

import json
login_by_country = json.loads(open('login_by_country.json', 'r'))

我如何根据每个国家的num_of_unique_ips值对这本字典进行排序?

答案
sorted(login_by_country.items(), key=lambda it: it[1]['num_of_unique_ips'])

这将返回(country,values_dict)对的列表。您可以将它转换回字典,同时保留排序顺序,方法是将其传递给OrderedDict,或者如果您使用的是保证字典顺序的Python版本(cpython 3.6+或pypy 2.5),则将其转换为常规dict

另一答案

正如@johrsharpe在评论中所说 - 字典不必保持秩序(但可能它们将保留在最新的Python中)。

您可以使用(num_of_unique_ips , country)对创建列表,然后您可以轻松地对其进行排序并保持有序。

logins_by_country = {
    "Chile": {
        "num_of_unique_ips": 1,
        "num_of_unique_asns": 1,
        "asns": {
            "AS16629 CTC. CORP S.A. (TELEFONICA EMPRESAS)": 1
        }
    },
    "China": {
        "num_of_unique_ips": 1,
        "num_of_unique_asns": 1,
        "asns": {
            "AS4808 China Unicom Beijing Province Network": 1
        }
    }, # thi
}

data = [(val["num_of_unique_ips"], key) for key, val in logins_by_country.items()]

order = sorted(data) 

print(order)

结果。它由num_of_unique_ipscountry排序(如果他们有sam num_of_unique_ips

[(1, 'Chile'), (1, 'China')]

现在您可以使用它以预期的顺序从字典中获取数据。

for number, country in order:
    print(logins_by_country[country])

您也可以使用它来创建OrderedDict,它将保持秩序

from collections import OrderedDict

new_dict = OrderedDict()

for number, country in order:
    new_dict[country] = logins_by_country[country]

print(new_dict)

以上是关于按字典值的值对字典进行排序的主要内容,如果未能解决你的问题,请参考以下文章

如何按字典中的值对字典列表进行排序? [复制]

在PHP中按数组键的值对字典中的数组进行排序

按字典键的值对包含 NSMutableDictionary 的 NSMutableArray 进行排序

c# Dictionary 字典的排序问题,请大家指点

根据列表中的元素对列表作为值的字典进行排序

如何按值对 Python 字典进行排序? [复制]