这些for语句如何在此目录中工作?

时间:2018-11-05 19:58:13

标签: python python-3.x

试图弄清楚如何将电话号码从字母转换为数字形式。我发现这段代码可以正常工作,但是我很难理解为什么这样做。我了解.get方法,但是我不明白为什么在调用char_num_map中的代码时会从列表中获取相应的数字。有人可以解释为什么吗?

char_numbers = [('abc',2), ('def',3), ('ghi',4), ('jkl',5), 
('mno',6), ('pqrs',7), ('tuv',8), ('wxyz',9)]
char_num_map = {c:i for k,i in char_numbers for c in k}
phone = '800-FUN-KIDS'
result = "".join(str(char_num_map.get(i,i)) for i in 
phone.lower())
result

在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

首先,char_num_map是一个字典,包含从字母到数字的映射。字母为keys,映射数字为values

接下来,for i in phone.lower()遍历phone变量,并逐一返回变量的包含。

对于dict.get方法,完整功能如下:dict.get(key, default = None)

  

参数键-这是要在字典中搜索的键。

     

默认-这是密钥不存在时要返回的值

因此,您在i中传递了char_num_map.get(i,i)


分步示例:

首先,运行此:

for i in phone.lower():
    pass

print(i)
#s

这将返回i = 's'

下一步,键入:

char_num_map.get(i,i)

这将返回:

7

原因是get试图找到名为key的{​​{1}}并返回其s ,否则将返回的'。