【发布时间】:2012-07-17 12:45:03
【问题描述】:
文件名.dat 看起来完全像这样:
Fry, Philip J.;999 111-1111;999 222-2222
Rodriguez, Bender B.;999 333-3333;999 444-4444
Farnsworth, Professor;999 555-5555;999 666-6666
Leela, Turanga;999 777-7777;999 888-8888
Wong, Amy;999 999-9999;999 101-1010
下面的代码在底部给出了打印结果。我想做的是制作一个菜单驱动程序,允许用户按数字选择他们想要修改的记录。在伪代码中,它看起来像这样:
- 带有编号电话列表的第一个代码块在这里
- 按编号输入要修改的记录
- 用户输入 3
- 对于 Rodriguez,Bender B 输入 a c 修改手机或输入 h 修改家庭电话
- 用户输入h
- 输入 10 位电话号码,不带空格
- 用户输入7771234567
- 记录被更改
- 输入 p 以查看修改后的电话簿(这将显示所有记录,但 Bender 使用不同的电话
- 您要进行其他修改吗? y 表示是,n 表示否
我的问题是我找不到将主键绑定到输入的用户号的方法。由于 python 字典没有顺序,我发现这很难做到。有人可以帮忙吗?我只需要这个,剩下的我自己做。
pBook = {}
fp = open('names.dat')
# populate pBook
while 1:
line = fp.readline()
if not line:
break
x = line[:-1]
data = x.split(';')
pBook[data[0]] = {'home': data[1], 'cell': data[2]}
fp.close()
# optional if you want to see the dictionary structure
# print pBook
i = 1
print '\nPhone listings:\n'
for record in pBook:
key = str(i)
i += 1
print key + ')', record + ':', 'Home', pBook[record]['home'] + ',', 'Cell', pBook[record]['cell']
print ''
电话列表:
- Farnsworth,教授:家庭 999 555-5555,细胞 999 666-6666
- Fry, Philip J.:家庭 999 111-1111,细胞 999 222-2222
- Rodriguez, Bender B.:家庭 999 333-3333,牢房 999 444-4444
- Wong, Amy:家庭 999 999-9999,牢房 999 101-1010
- Leela, Turanga:家 999 777-7777,细胞 999 888-8888
pBook 填充后的打印结果,为这篇文章设置了格式,以便更容易理解它的结构。主键是人名,值是另一个字典,其中“cell”和“home”是键,电话号码是各自的值。
{
'Farnsworth, Professor': {'cell': '999 666-6666', 'home': '999 555-5555'},
'Fry, Philip J.': {'cell ': '999 222-2222', 'home': '999 111-1111'},
'Rodriguez, Bender B.': {'cell': '999 444-4444', 'home': '999 333-3333'},
'Wong, Amy' : {'cell': '999 101-1010', 'home': '999 999-9999'},
'Leela, Turanga': {'cell': '999 888-8888', 'home': '999 777-7777'}
}
【问题讨论】:
-
我假设您在
#populate pBook下的while循环中存在缩进错误,否则您不会填充太多内容。 -
您使用了错误的数据结构。使用
list,而不是dict,您的烦恼就会消失。
标签: python