如果您设计了数据格式,固定宽度的列不是一个很好的格式。但如果你被他们困住了,他们很容易对付。在
首先,要分析数据:addressbook = []
with open('addressbook.txt', 'r') as f:
for line in f:
name, city = line[:17], line[17:]
last, first = name.split(',')
addressbook.append((first, last, city))
但现在,您希望能够按名字进行搜索。你可以这样做,但是对于一个巨大的通讯录来说,这可能会很慢,而且代码也不会很直接:
^{pr2}$
如果不只是元组列表,而是使用字典,将名字映射到另一个字段,会怎么样?在addressbook = {}
with open('addressbook.txt', 'r') as f:
for line in f:
name, city = line[:17], line[17:]
last, first = name.split(',')
addressbook[first]=((last, city))
但这不好每一个新的“约翰”都会抹去以前的“约翰”。所以我们真正需要的是一个字典,将名字映射到元组的列表中:addressbook = collections.defaultdict(list)
with open('addressbook.txt'