Я пишу функцию, где я просматриваю словарь. Словарь содержит художников как ключи и их картины как ценности. Мне нужно найти картину в словаре, который имеет наибольшую площадь, и если есть два, которые имеют равную площадь, они должны быть возвращены в виде списка кортежей.Поиск больших областей в словаре
Пример Словарь:
{
'A, Jr.':[("One",1400,10,20.5,"oil paint","Austria"),("Three",1400,100.0,100.0,"oil paint","France"),("Twenty",1410,50.0,200.0,"oil paint","France")],
'X':[("Eight",1460, 100.0, 20.0, "oil paint","France"),("Six",1465,10.0, 23.0, "oil paint", "France"),("Ten",1465,12.0,15.0,"oil paint","Austria"),("Thirty",1466,30.0,30.0,"watercolor","Germany")],
'M':[("One, Two", 1500, 10.0, 10.0, "panel","Germany")]
}
В основном четыре значное числа является годом, что картина или произведение искусства была создана, и следующие два числами являются длиной и шириной. Мне нужно вернуть значения, которые имеют наибольшую площадь при умножении длин и ширины. Таким образом, для приведенных выше слоейся функции find_largest должна возвращать
find_largest(dictionary2())
[('A, Jr.', 'Three'), ('A, Jr.', 'Twenty')]
С 100 * 100 = 10000 для картины «Три» и 50 * 200 = 10000 для «двадцатки» картины они оба возвращаются в виде кортежей в списке ,
У кого-нибудь есть советы о том, как это сделать? Я начал код ниже, но я не думаю, что это правильный подход для этого.
def find_largest(dictionary):
matches = {}
for key, the_list in db.items():
for record in the_list:
value = record[4]
if dictionary in record:
if key in matches:
max(the_list)
max(lst, key=lambda tupl: tupl[2]*tupl[3])
matches[key].append(record)
else:
matches[key] = [record]
return matches
Это в основном мой код из более ранней функции с несколькими значительными изменениями. Эта базовая структура работала для нескольких моих целей. Я добавил max (match), но я понимаю, что это не делает много, если функция не умножает длины и ширину, а затем ищет max. Если у кого есть советы, было бы полезно
Вы можете передать '' max' в key' параметр: 'макс (LST, ключ = lambda tupl: tupl [2] * tupl [3]) 'доставит вам кортеж с наибольшей площадью из одного списка в вашем dict. – schwobaseggl
Спасибо за совет, я должен положить это вместо max (совпадений)? – n00bprogrammer22
это было бы более подходящим для 'max (the_list)' в этом коде, но max обычно возвращает только один элемент, даже если несколько элементов разделяют максимальное значение – schwobaseggl