Вы неправильно строите свой словарь, потому что отступы в нескольких местах неверны.Кроме того, ваше print-заявление не относится к словарю, который вы строите.Попробуйте это:
def nameStatistics(nameList):
D={}
for firstName, lastName, unused in nameList:
if lastName not in D:
D[lastName]={}
if firstName not in D[lastName]:
D[lastName][firstName] = 0
D[lastName][firstName] += 1
# only print after all tuples are processed
for lastName, stats in D.iteritems():
print lastName + "\n"
for firstName, frequency in stats.iteritems():
print "\t{0}: {1}\n".format(firstName, frequency/float(len(stats)))
Вы можете упростить это, используя defaultdict
:
from collections import defaultdict
def nameStatistics(nameList):
D = defaultdict(lambda: defaultdict(int))
for firstName, lastName, unused in nameList:
D[lastName][firstName] += 1
# only print after all tuples are processed
for lastName, stats in D.iteritems():
print lastName + "\n"
for firstName, frequency in stats.iteritems():
print "\t{0}: {1}\n".format(firstName, frequency/float(len(stats)))