Если вам придется делать определенные вычисления снова и снова, тогда, вероятно, лучше написать функцию.Вот функция, которая берет словарь, такой как dictex, имя животного и букву, и возвращает для вас индивидуальные вычисления:
# Do the calculations for a particular animal and letter
def calculate_value(mydict, animal, letter):
W = mydict[animal][letter][0][2]
X = mydict[animal][letter][0][1]
Y = mydict[animal][letter][1][2]
Z = mydict[animal][letter][1][1]
# Do the math and convert the resulting number to a string,
# which will save us some headaches when writing to the csv file.
return str((W-X) + (Y-Z))
Вот функция, которая просматривает весь словарь, вычисляет значения для каждогоanimal и letter, а затем, наконец, возвращает результат в виде списка списков, который выглядит следующим образом: [ ['cat',7,9,10], ['dog',8,10,9], ... ]
и т. д.
def make_new_list(my_dict):
new_list = []
for animal in my_dict:
individual_animal_list = [animal]
for letter in ['a', 'b', 'c']:
individual_animal_list.append(calculate_value(my_dict, animal, letter))
new_list.append(individual_animal_list)
return new_list
Причина, по которой я использовал вышеуказанный формат, заключается в том, что он значительно облегчаетзаписать результат в CSV-файл.Просто возьмите каждый список, полученный из предыдущей функции, объедините все вместе с запятыми между ними и запишите его в виде строки в файле:
dictex = {'cat': {'a': [[1, 3, 5], [2, 2, 7]], 'b': [[1, 3, 7], [2, 2, 7]], 'c': [[1, 2, 7], [2, 2, 7]]},
'dog': {'a': [[1, 2, 5], [2, 2, 7]], 'b': [[1, 2, 7], [2, 2, 7]], 'c': [[1, 3, 7], [2, 2, 7]]},
'moose': {'a': [[1, 1, 5], [2, 2, 7]], 'b': [[1, 1, 7], [2, 2, 7]], 'c': [[1, 1, 7], [2, 2, 7]]}}
new_list = make_new_list(dictex)
with open('my_file.csv', 'w') as f:
f.write('animal,a,b,c\n') # Write the header line
for row in new_list:
f.write(','.join(row))
f.write('\n')
Имейте в виду, что словари в Python НЕ упорядочены.Таким образом, ваш результирующий файл не обязательно будет содержать строки с животными в том же порядке, в котором они отображаются в исходном словаре.