我正在寫一個函數,讓我通過字典。該字典包含藝術家作爲鍵和他們的繪畫作爲價值觀。我需要在具有最大面積的字典中找到該繪畫,並且如果有兩個面積相等的字典,他們應該作爲元組列表返回。查找字典中最大的區域
例詞典:
{
'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'一個'key'參數:'MAX(LST,關鍵= lambda tupl:tupl [2] * tupl [3])'會從你的字典中的一個列表中得到具有最大面積的元組。 – schwobaseggl
感謝您的建議,我應該把這個代替max(火柴)? – n00bprogrammer22
這將更適合該代碼中的'max(the_list)',但max通常只會返回一個項目,即使多個項目共享最大值 – schwobaseggl