试图弄清楚如何将电话号码从字母转换为数字形式。我发现这段代码可以正常工作,但是我很难理解为什么这样做。我了解.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
在此先感谢您的帮助。
答案 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
,否则将返回的'。