Python字典代码拆解疑问:为何用[name]而非[language]?
《Head First Python(第2版)》第102页代码疑问解答
先看示例代码:
favorite_languages = { 'jen': 'python', 'sarah': 'c', 'edward': 'ruby', 'phil': 'python', } friends = ['phil', 'sarah'] for name in favorite_languages.keys(): print(f"Hi {name.title()}.") if name in friends: language = favorite_languages[name].title() print(f"\t{name.title()}, I see you love {language}!")
疑问1:favorite_languages[name]里为什么用name而不是language?
字典的核心取值逻辑是通过键(key)获取对应的值(value),这里favorite_languages的键是用户名(jen、sarah这类),值是对应的编程语言。要拿到某个用户的偏好语言,必须用该用户的名字(也就是字典的key)去查询。
language是我们自己定义的变量,用来存储查到的语言结果,它并不是字典里的键,所以没法用它来取字典内容。比如遍历到sarah时,favorite_languages['sarah']才能拿到'c',这是唯一正确的取值方式。
疑问2:代码执行逻辑验证&完整拆解
先纠正你理解里的一个小错误:friends列表里的元素是字典的keys(用户名),不是values(编程语言)。其他部分的理解基本正确,下面是完整的执行流程拆解:
- 定义字典
favorite_languages:建立“用户名-偏好编程语言”的对应关系,键是用户名,值是对应语言。 - 定义列表
friends:存储需要特殊问候的用户名。 - 遍历字典所有键:
for name in favorite_languages.keys()会依次把jen、sarah、edward、phil赋值给变量name。 - 输出通用问候:不管是不是好友,先打印
Hi + 首字母大写的用户名,比如Hi Jen.、Hi Sarah.。 - 判断是否为好友:如果当前
name是phil或sarah,进入专属问候分支。 - 获取并格式化语言:用当前用户名(
name)作为键,从字典取出对应语言,调用.title()让首字母大写后赋值给language。 - 输出好友专属问候:打印缩进的个性化语句,比如
Sarah, I see you love C!。
代码会按遍历顺序逐个处理用户:先处理jen(非好友,仅输出问候)→ 处理sarah(好友,输出问候+专属语句)→ 处理edward(非好友,仅输出问候)→ 处理phil(好友,输出问候+专属语句)。
内容的提问来源于stack exchange,提问作者KiddoPL
相关产品推荐
相关产品推荐

