我有一个元组列表,[(falseName, realName, positionOfMistake)]
例如:
[('Milter', 'Miller', 4),
('Manton','Manson',4),
('Moller', 'Miller', 2)]
我需要写一个返回的函数:
Miller:
Milter: 0.50
Moller: 0.50
Manson:
Manton: 1.00
我在想:
def nameStatistics(nameList):
D={}
for tup in nameList
if tup[1] not in D:
D[tup[1]]={}
if tup[0] not in D[tup[1]]:
D[tup[1]][tup[0]]=0
D[tup[1]][tup[0]] += 1
print tup[1]+":\n\t"+tup[0]
但是我得到了:
Miller:
Milter
Miller:
Moller
Manson:
Manton
答案 0 :(得分:2)
您没有正确构建字典,因为您的缩进在某些地方是错误的。此外,您的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)))