我目前有一些看起来像这样的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
值对字典进行排序?
答案 0 :(得分:4)
sorted(login_by_country.items(), key=lambda it: it[1]['num_of_unique_ips'])
这将返回(国家,values_dict)对的列表。您可以通过将其传递给OrderedDict
或常规dict
来将其转换回字典,同时保持排序顺序,如果您使用的是保证字典排序的Python版本(cpython 3.6+或pypy 2.5)。
答案 1 :(得分:0)
就像@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_ips
和country
排序(如果它们的得分为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)