#python #json #python-3.x
#python #json #python-3.x
Вопрос:
Как я могу увидеть, какой ключ имеет наибольшее значение points в python?
{
"258771223473815553": {"total": 32923, "points": 13},
"235088799074484224": {"total": 154, "points": 154},
"551515155301662723": {"total": 136, "points": 136},
"365975655608745985": {"total": 306, "points": 306},
"548923168530890762": {"total": 815, "points": 3},
"390249444567941121": {"total": 33442, "points": 1},
"256599831097638912": {"total": 101, "points": 101},
"247033712531865600": {"total": 181, "points": 181},
"294882584201003009": {"total": 106, "points": 106},
"377586042179551235": {"total": 290, "points": 117},
"295190202693976065": {"total": 33890, "points": 28},
"550047284008583168": {"total": 254, "points": 1000}
}
Комментарии:
1. Почему вы хотите это сделать? Объекты JSON по своей сути неупорядочены.
2. @juanpa.arrivillaga я отредактировал вопрос, чтобы придать ему немного больше смысла
Ответ №1:
Словари Python неупорядочены. Однако вы можете преобразовать словарь в список или кортеж словарей. Списки / кортежи в python упорядочены, поэтому вы можете сортировать их, например:
sorted(json_dict.items(), key=lambda val: val[1]['points'], reverse=True)
Вы можете изменить аргумент lambda в key на любой механизм упорядочивания, который вы хотели бы применить в своем словаре.
Или, возможно, вы захотите взглянуть на структуру данных OrderedDict.
from collections import OrderedDict
OrderedDict(sorted(json_dict.items(), key=lambda val: val[1]['points'], reverse=True))
Комментарии:
Ответ №2:
In [1]: d = {
...: "258771223473815553": {"total": 32923, "points": 13},...
...
In [2]: max(d.items(), key = lambda tup: tup[1]['points'])[0]
Out[2]: '550047284008583168'
Ответ №3:
Вот код
a={"258771223473815553": {"total": 32923, "points": 13}, "235088799074484224": {"total": 154, "points": 154}, "551515155301662723": {"total": 136, "points": 136}, "365975655608745985": {"total": 306, "points": 306}, "548923168530890762": {"total": 815, "points": 3}, "390249444567941121": {"total": 33442, "points": 1}, "256599831097638912": {"total": 101, "points": 101}, "247033712531865600": {"total": 181, "points": 181}, "294882584201003009": {"total": 106, "points": 106}, "377586042179551235": {"total": 290, "points": 117}, "295190202693976065": {"total": 33890, "points": 28}, "550047284008583168": {"total": 254, "points": 1000}}
a=a.items()
dic={}
ids=[] #ids list
ke=[] #totals list
va=[] #points list
for key,val in a:
ids.append(key)
ke.append(list(val.items())[1][1])
va.append(list(val.items())[0][1])
def bubbleSort(ids,ke,va):
for passnum in range(len(ke)-1,0,-1):
for i in range(passnum):
if ke[i]<ke[i 1]:
temp1 = ke[i]
ke[i] = ke[i 1]
ke[i 1] = temp1
temp2 = ids[i]
ids[i] = ids[i 1]
ids[i 1] = temp2
temp3 = va[i]
va[i] = va[i 1]
va[i 1] = temp3
bubbleSort(ids,ke,va)
c={}
for i in range(len(va)):
b={}
b["total"]=va[i]
b["points"]=ke[i]
c[ids[i]]=b