为了账号安全,请及时绑定邮箱和手机立即绑定

python代码问题之字典

python代码问题之字典

Hankong 2016-10-05 23:25:20
people={    "alice":{        "phone":"2341",        "addr":"for drive 23"    },    "beth":{        "phone":"9012",        "addr":"bsr street 42"    },    "cecil":{        "phone":"3158",        "addr":"baz avenue 90"    }}#针对电话号码和地址使用的描述性标签,会在打印时候用到labels={    "phone":"phone number",    "addr":"address"}name=raw_input("Name:")#查找电话号码还是地址?request=raw_input("phone number(p) or address (a)?")#使用正确的键:if request=="p":key="phone"if request=="a":key="addr"#如果名字是字典中的有效键方才打印信息:if name in people:print "%s's %s is %s."%\   (name.labels[key],people[name][key])提示错误为:File "c:\Users\DULU\Desktop\untitled-1.py", line 32, in <module>  (name.labels[key],people[name][key])AttributeError: 'str' object has no attribute 'labels'(这是什么意思,看不懂呀)
查看完整描述

3 回答

已采纳
?
longgb246

TA贡献1条经验 获得超1个赞


1、if name in people等价于if name in people.keys(),

你的代码里面people.keys()有:"alice"、"beth"、"cecil"。这3个都是string类型,string类型没有labels这个属性。

这也就是你的报错信息:'str' object has no attribute 'labels'。

string类型本身就没有labels这个属性,别告诉我你连这个都不知道。所以你后面引用name.labels[key]就会报错。

2、还有你print的参数个数不对,个人不太喜欢%,偏向于.format()。

我大致知道你想干嘛,就是输入姓名和p、a输出,结果是吧,最后几行你改下:

# 使用正确的键:
if request == "p":
    key = "phone"
if request == "a":
    key = "addr"
# 如果名字是字典中的有效键方才打印信息:
if name in people.keys():
    print "%s's %s is %s." % (name, key, people[name][key])
    # 你可以尝试下面的.format()
    print "{0}'s {1} is {2}.".format(name, key, people[name][key])

个人强烈建议,python代码不要写在一行,缩进才是它的规范。

查看完整回答
1 反对 回复 2016-10-06
  • Hankong
    Hankong
    大神呀,虽然我也没看懂你想说什么吧,还是谢谢
  • Hankong
    Hankong
    能不能在我那个基础上帮我改一下,我看的辅导书上就是那么教的,你说的那些我还没有学到了
  • 3 回答
  • 0 关注
  • 1869 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信