python学习笔记

来源:互联网 发布:移动80端口 编辑:程序博客网 时间:2024/06/07 15:25

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()
 if len(names)==2 :names.insert(1,'')
 labels='first','middle','last'
 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,'a b c')

print(lookup(Mynames,'middle','b'))

上面代码中

if people:
   people.append(full_name)
  else:
   data[label][name]=[full_name]
令人费解,实际上在for循环中,每执行一次循环,就产生一个(label,name)组,lookup函数将这一组参数在数据结构里面查询,如果可以查询到,即people返回一个列表(注意!这个列表和数据结构中的列表是一样的,修改这个列表,数据结构中的列表也会改变!!!),说明数据结构中已经有一个和label相同的全名了,这时,使用people.append(full_name)就可以将新增的全名加入到数据结构中的列表去了。如果查询不到,即people返回none,就添加一个新的键加入到数据结构中,并把全名赋值给它。