Найти минимальное значение словарь словарей (JSON)
есть вот такого вида словарь словарей
{'telegram': {'afghanistan': {'virtual18': {'cost': 12.19, 'count': 1000}, 'virtual23': {'cost': 16.25, 'count': 1000}}
и мне нужно отсортировать значение price по минимальной цене
import json
import requests
product = 'telegram'
headers = {
'Content-Type': 'application/json',
}
params = (
('product', product),
)
response = requests.get('https://5sim.net/v1/guest/prices', headers=headers, params=params)
r = response.json()
for smth in r['telegram']:
if smth['cost']:
print(smth)
а дальше я не понимаю как перебрать словарь или может функцию min() использовать, помогите разобраться
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Ну вот так примерно:
for country,tariffs in r['telegram'].items():
print(country)
print(sorted(tariffs.items(), key=lambda x: x[1]['cost']))
Вывод:
afghanistan
[('virtual18', {'cost': 12.19, 'count': 1000}), ('virtual23', {'cost': 16.25, 'count': 1000}), ('virtual4', {'cost': 17.13, 'count': 570})]
albania
[('virtual18', {'cost': 12.46, 'count': 1000}), ('virtual23', {'cost': 25, 'count': 1000}), ('virtual4', {'cost': 26.25, 'count': 592})]
...
Хотя они там вроде и так отсортированы. Но я вам просто показал, как это всё перебрать и как сортировать. Задача у вас не совсем чётко сформулирована.
Если нужно найти для каждой страны минимальный тариф и потом отсортировать ещё страны по минимальному тарифу, то можно сделать так:
country_minprice = []
for country,tariffs in r['telegram'].items():
country_minprice.append((country, min(tariffs.items(), key=lambda x: x[1]['cost'])[1]['cost']))
print(sorted(country_minprice, key=lambda x: x[1]))
Вывод:
[('kyrgyzstan', 2.6), ('kazakhstan', 3.5), ('cambodia', 3.64), ('mongolia', 3.64),
...
('montserrat', 26.25), ('norway', 26.25), ('saintlucia', 26.25), ('italy', 27.38)]