У меня есть JSON, как это
[{'percentage': {'negative': [3132394, 0.73],
'neutral': [388133213, 90.18],
'positive': [39129393, 9.09]},
'source_id': 2,
'total': 430395000},
{'percentage': {'negative': [3132394, 0.73],
'neutral': [388133213, 90.18],
'positive': [39129393, 9.09]},
'source_id': 2,
'total': 430395000}]
Как я могу сортировать по percentage и его процентному значению (2-й объект в списке в каждом из словарей (neutral, positive, negative)
Я пробовал это:
sorted(dict[key], key=lambda function)
но это похоже, что это неприменимо, и я немного застрял. Как это сделать?
@RnD Ура, буду делать это и дальше!
Это не сортировка, а замена значений второго элемента в словаре.
вы постоянно меняете желаемый результат, редактируя свой вопрос. придерживайтесь одного, если хотите, чтобы люди помогали.
@MilesDavisi отредактировал его только один раз, хотя, не знаю, почему он претерпел несколько правок пользователями (и принял только 1 изменение с / предварительно обработанным JSON)






Вы можете отсортировать список. Таким образом, вы можете отсортировать список, содержащий ваши словари, используя одно или несколько значений, которые содержатся в самом словаре в качестве ключа, но вы не можете отсортировать словарь. Словари так не работают.
Попробуй это
data = [{'percentage': {'negative': [3132394, 0.73],
'neutral': [388133213, 90.18],
'positive': [39129393, 9.09]},
'source_id': 2,
'total': 430395000},
{'percentage': {'negative': [3132394, 0.73],
'neutral': [388133213, 90.18],
'positive': [39129393, 9.09]},
'source_id': 2,
'total': 430395000}]
def get_positive_pct(entry):
# sort by the seconds element in the positive list - you can change it once your post is stable..
return entry['percentage']['positive'][1]
sorted_data = sorted(data, key=get_positive_pct)
Я не уверен в вашем вопросе, так как он претерпел много изменений. Я думаю, это то, что вы ищете...
>>>p
[{'percentage': {'negative': [3132394, 0.73],
'neutral': [388133213, 90.18],
'positive': [39129393, 9.09]},
'source_id': 2,
'total': 430395000},
{'percentage': {'negative': [3132394, 0.73],
'neutral': [388133213, 90.18],
'positive': [39129393, 9.09]},
'source_id': 2,
'total': 430395000}]
>>>for i in p:
i["percentage"]=sorted(i["percentage"].items(),key=lambda x:x[1],reverse=True)
>>>p
[{'percentage': [('neutral', [388133213, 90.18]),
('positive', [39129393, 9.09]),
('negative', [3132394, 0.73])],
'source_id': 2,
'total': 430395000},
{'percentage': [('neutral', [388133213, 90.18]),
('positive', [39129393, 9.09]),
('negative', [3132394, 0.73])],
'source_id': 2,
'total': 430395000}]
Это делает именно то, что я искал. Большое спасибо и спасибо за использование лямбды! видимо надо было копнуть глубже :)
@DirtyBit, о, хороший комментарий, я обновлю вопрос!