<p>如果你发现自己不得不一遍又一遍地做某个计算,那么这时最好写一个函数。下面是一个函数,它接受dictex之类的字典、动物名称和字母,并为您返回单独的计算结果:</p>
<pre><code># 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))
</code></pre>
<p>下面是一个函数,它遍历整个字典,计算每个动物和字母的值,最后返回如下列表中的结果:<code>[ ['cat',7,9,10], ['dog',8,10,9], ... ]</code>等等</p>
<pre><code>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
</code></pre>
<p>我之所以使用上述格式,是因为这样可以更容易地将结果写入csv文件。只需获取上一个函数中的每个列表,用逗号将所有内容连接在一起,并将其作为一行写入文件:</p>
<pre><code>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')
</code></pre>
<p>请记住,Python中的字典是没有顺序的。因此,生成的文件中的动物行的顺序不一定与原始词典中的动物行的顺序相同</p>