Это достаточно легко сделать с помощью нескольких циклов, но я уверен, что есть гораздо более эффективный способ добиться этого, и я стремлюсь учиться.
Рассмотрим следующий массив dict, который представляет данные, извлеченные из базы данных nosql.
x = [
{
"loc" : "alpha",
"tag" : 1,
"dist" : 5
},
{
"loc" : "bravo",
"tag" : 0,
"dist" : 2
},
{
"loc" : "charlie",
"tag" : 5,
"dist" : 50
},
{
"loc" : "delta",
"tag" : 4,
"dist" : 2
},
{
"loc" : "echo",
"tag" : 2,
"dist" : 30
},
{
"loc" : "foxtrot",
"tag" : 4,
"dist" : 2
},
{
"loc" : "gamma",
"tag" : 4,
"dist" : 2
},
{
"loc" : "hotel",
"tag" : 0,
"dist" : 2
},
]
Я хотел бы найти все элементы с наименьшим значением 'dist', и если должно быть более одного dict с одинаковым наименьшим значением, я хочу, чтобы группировка по атрибуту 'tag' имела наибольшее количество dicts с то же самое низкое значение.
например, желаемые возвращаемые данные из вышеприведенного будут:
r = [
{
"LocationName" : "delta",
"tag" : 4,
"dist" : 2
},
{
"loc" : "foxtrot",
"tag" : 4,
"dist" : 2
},
{
"loc" : "gamma",
"tag" : 4,
"dist" : 2
}
]
Резюме: dist: 2 - это наименьшее значение, [bravo, delta, foxtrot, gamma, hotel] - все имеют dist 2, [bravo, hotel] имеют тег: 0 и [delta, foxtrot, gamma] есть тег: 4. Массив dicts [delta, foxtrot, gamma] возвращается, поскольку они имеют больше с тем же совпадающим тегом и самым низким dist.
Я использую Python 3.6.
Спасибо за помощь и интерес!