Посмотрите, какой ключ JSON имеет наибольшее значение в python

#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))
  

Комментарии:

1. В том первом примере вы создаете список , а не массив .

Ответ №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