Python 更新别名和父级
Python update alias and parent
我必须在 Python 中创建一个电话簿,它应该具有以下功能:
- add name number - 添加 number 和 name 到字典。名称必须是唯一的,对于数字也是如此。
- lookup name – 打印与name
相关的数字
- alias name newname – 允许从 newname[=44 搜索 name =]
- 更改姓名号码 – 将与现有姓名关联的号码更改为号码
- quit – 退出程序
运行 程序应如下所示:
telebok> add peter.forsberg 12345
telebok> lookup peter.forsberg
12345
telebok> alias peter.forsberg foppa
telebok> lookup foppa
12345
telebok> alias foppa MR21
telebok> change MR21 67890
telebok> lookup peter.forsberg
67890
除了零钱,我一切正常:
def adressbook():
telebook = {"jacob.engert":"8472923777", "nisse":"092563243"}
while True:
book = raw_input("telebook> ").lower()
lista = book.split()
if "add" in lista[0]:
n = lista[1]
x = lista[2]
if x in telebook.values():
print "Number already exists!"
elif n in telebook:
print "Name already exists!"
else:
telebook[n] = x
print telebook
elif "lookup" in lista[0]:
n = lista[1]
if n in telebook:
print n, "", telebook[n]
elif n.isdigit():
print "Type only characters!"
else:
print "This person does not exist!"
elif "alias" in lista[0]:
n = lista[1]
alias = lista[2]
if n in telebook:
v = telebook.get(n)
telebook[alias] = v
elif "change" in lista[0]:
key = lista[1]
value = telebook.get(key)
newvalue = lista[2]
for key, value in telebook.items():
telebook.update({key:newvalue})
print telebook
所以当我更新别名时,我希望原件也更新,但我得到了这个结果:
>>> adressbook()
telebook> add ove 345347657
{'jacob.engert': '8472923777', 'ove': '345347657', 'nisse': '092563243'}
telebook> alias ove mr.o
telebook> lookup mr.o
mr.o 345347657
telebook> change mr.o 534523234
{'mr.o': '534523234', 'jacob.engert': '8472923777', 'ove': '345347657', nisse': '092563243'}
{'mr.o': '534523234', 'jacob.engert': '534523234', 'ove': '345347657', 'nisse': '092563243'}
{'mr.o': '534523234', 'jacob.engert': '534523234', 'ove': '534523234', 'nisse': '092563243'}
{'mr.o': '534523234', 'jacob.engert': '534523234', 'ove': '534523234', 'nisse': '534523234'}
telebook>
所以我的问题是,我怎样才能做到当我改变别名的号码时,原来的号码也会改变?
你几乎走在了正确的轨道上。
为了更改所有条目(别名和父项),您需要查找与用户要更改的条目(无论是否为别名)具有相同编号的条目并替换它们的编号使用新的:
key = lista[1]
newvalue = lista[2]
present_value = telebook.get(key)
if present_value:
for name, num in telebook.items():
if num == present_value:
telebook[name] = newvalue
或使用字典理解:
key = lista[1]
newvalue = lista[2]
present_value = telebook.get(key)
if present_value:
upd = {name: newvalue for name, num in telebook.items() if num == present_value }
telebook.update(upd)
或使用 generator expression 生成元组序列(dict.update
两者都接受)
key = lista[1]
newvalue = lista[2]
present_value = telebook.get(key)
if present_value:
upd = ((name, newvalue) for name, num in telebook.items() if num == present_value)
telebook.update(upd)
我必须在 Python 中创建一个电话簿,它应该具有以下功能:
- add name number - 添加 number 和 name 到字典。名称必须是唯一的,对于数字也是如此。
- lookup name – 打印与name 相关的数字
- alias name newname – 允许从 newname[=44 搜索 name =]
- 更改姓名号码 – 将与现有姓名关联的号码更改为号码
- quit – 退出程序
运行 程序应如下所示:
telebok> add peter.forsberg 12345
telebok> lookup peter.forsberg
12345
telebok> alias peter.forsberg foppa
telebok> lookup foppa
12345
telebok> alias foppa MR21
telebok> change MR21 67890
telebok> lookup peter.forsberg
67890
除了零钱,我一切正常:
def adressbook():
telebook = {"jacob.engert":"8472923777", "nisse":"092563243"}
while True:
book = raw_input("telebook> ").lower()
lista = book.split()
if "add" in lista[0]:
n = lista[1]
x = lista[2]
if x in telebook.values():
print "Number already exists!"
elif n in telebook:
print "Name already exists!"
else:
telebook[n] = x
print telebook
elif "lookup" in lista[0]:
n = lista[1]
if n in telebook:
print n, "", telebook[n]
elif n.isdigit():
print "Type only characters!"
else:
print "This person does not exist!"
elif "alias" in lista[0]:
n = lista[1]
alias = lista[2]
if n in telebook:
v = telebook.get(n)
telebook[alias] = v
elif "change" in lista[0]:
key = lista[1]
value = telebook.get(key)
newvalue = lista[2]
for key, value in telebook.items():
telebook.update({key:newvalue})
print telebook
所以当我更新别名时,我希望原件也更新,但我得到了这个结果:
>>> adressbook()
telebook> add ove 345347657
{'jacob.engert': '8472923777', 'ove': '345347657', 'nisse': '092563243'}
telebook> alias ove mr.o
telebook> lookup mr.o
mr.o 345347657
telebook> change mr.o 534523234
{'mr.o': '534523234', 'jacob.engert': '8472923777', 'ove': '345347657', nisse': '092563243'}
{'mr.o': '534523234', 'jacob.engert': '534523234', 'ove': '345347657', 'nisse': '092563243'}
{'mr.o': '534523234', 'jacob.engert': '534523234', 'ove': '534523234', 'nisse': '092563243'}
{'mr.o': '534523234', 'jacob.engert': '534523234', 'ove': '534523234', 'nisse': '534523234'}
telebook>
所以我的问题是,我怎样才能做到当我改变别名的号码时,原来的号码也会改变?
你几乎走在了正确的轨道上。
为了更改所有条目(别名和父项),您需要查找与用户要更改的条目(无论是否为别名)具有相同编号的条目并替换它们的编号使用新的:
key = lista[1]
newvalue = lista[2]
present_value = telebook.get(key)
if present_value:
for name, num in telebook.items():
if num == present_value:
telebook[name] = newvalue
或使用字典理解:
key = lista[1]
newvalue = lista[2]
present_value = telebook.get(key)
if present_value:
upd = {name: newvalue for name, num in telebook.items() if num == present_value }
telebook.update(upd)
或使用 generator expression 生成元组序列(dict.update
两者都接受)
key = lista[1]
newvalue = lista[2]
present_value = telebook.get(key)
if present_value:
upd = ((name, newvalue) for name, num in telebook.items() if num == present_value)
telebook.update(upd)