def init(data):
data['first']={}
data['middle']={}
data['last']={}
def lookup(data,label,name):
return data[label].get(name)
def store(data,full_name):
names=full_name.split() #1.用split()方法把名字,中间名,姓分开!
if len(names)==2 :
names.insert(1,'')
p={}
labels=['first','middle','last'] #2.在这个函数里面labels要重新定义。
for (label,name) in zip(labels,names) :
people = lookup(data,label,name)
if people:
people.append(full_name)
else :
data[label][name]=[full_name]
以下是实现:
>>> MyNames={}
>>> init(MyNames)
>>> store(MyNames,'Magnus Lie Hetland')
>>> lookup(MyNames,'middle','Lie')
=======================================================
不懂得地方:
if people:
people.append(full_name)
else :
data[label][name]=[full_name]
1.people不是已经被赋值了么(people = lookup(data,label,name)),而且每循环一次,之前的值还会被覆盖,怎么又是一个列表?
2.data是一个字典,data[label][name]是全名里面的某一个名字(如中间名)叫XXX(如'Lie')的东西,这个东西不应该等于full_name啊!简单的来说,就这个更新字典的方法没看懂。就拿实现的例子来说,data['middle']['Lie']应该等于'Lie',不是全名啊。我的理解错在哪里,还望指出,非常感谢!