Как перебрать словарь и рассчитать коэффициент из двух разных элементов словаря? - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть словарь, похожий на этот:

table_wood = {'Red': {'Abbreviation': 'R',
                              'Instances': 269601,
                              'Code': '8924',
                              'Discovered': '1876-08-01',
                              'Largest usage': 'Douglas',
                 'Indigo': {'Abbreviation': 'IN',
                              'Instances': 216443,
                              'Code': '2343',
                              'Discovered': '1890-07-03',
                              'Largest usage': 'Freida'}}

Мне нужно перебрать словарь table_wood и вычислить (instance / code) для каждого словаря в table_wood.После того, как я это сделаю, мне нужно сообщить, у кого наибольшее количество экземпляров и у которого самое низкое.

Я попытался использовать циклы for для добавления соответствующих значений в пустые списки, а затем использовать для сравнения вложенный цикл for.эти значения списка, чтобы увидеть, какой из исходных экземпляров является наибольшим и самым низким.Он включает большое количество пустых списков, и я знаю, что есть лучший способ, если я могу просто сохранить их как новые пары ключ / значение в пустом словаре.

instanceCodeRate = []
colorInstances = []
highestInstance = []
lowestInstance = []
for color in table_wood:
    colorRate.append(color+ ": " +str(round((table_wood[color]["Instances"])/(table_wood[color]["Code"]),2))+ " instances per code.\n")
#print(instanceCodeRate)
    colorInstances.append(table_wood[color]["Instances"])
#print(colorInstances)
    for instance in colorInstances:
        if ((table_wood[color]["Instances"]) == min(colorInstances)):
            lowestInstance.append(color)
        elif ((table_wood[color]["Instances"]) == max(colorInstances)):
            highestInstance.append(color)
#print(instanceCodeRate)
#print(highestInstance)
#print(lowestInstance)

Когда я печатаю (instanceCodeRate)он делает это как элементы списка, что делает недействительным символ пробела "\ n", который я пытаюсь напечатать, чтобы каждая запись имела свою собственную строку.Мой elif работает, сохраняя только самые большие, но по какой-то причине оператор if, который хранит минимум, хранит несколько элементов списка там, где должен быть только один.

1 Ответ

0 голосов
/ 25 сентября 2019

Функция Python max принимает необязательный аргумент key

colors = list(table_wood.keys())
attrs = list(table_wood.values())

max_value = max(attrs, key=lambda: x: x['Instances']/int(x['Code']))

, который выводит:

{'Abbreviation': 'IN',
 'Instances': 216443,
 'Code': '2343',
 'Discovered': '1890-07-03',
 'Largest usage': 'Freida'}

То же самое можно сделать с min

...