Python中{}[]的问题

如下一段Python代码,将一个str转化为float:
from functools import reduce
def s2f(n):
def str(n):
return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9,'.': 0}[n]
def fol(x,y):
return (x*10+y)
return reduce(fol,map(str,n))/1000
print('str2float(\'123.456\') =', s2f('123.456'))

结果输出1230456.问题是,{'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9,'.': 0}[n],n='123.456',这个dict中为什么key值能够分别对应1,2,3等等,而不是key=123.456?
而且,直接输入:
print ({'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9,'.': 0}['123.456'])
会报错,为什么呢?

主要是由于reduce函数,和map函数的原因
参考Reduce说明:
Python中的reduce
python中的reduce内建函数是一个二元操作函数,他用来将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给reduce中的函数 func()(必须是一个二元操作函数)先对集合中的第1,2个数据进行操作,得到的结果再与第三个数据用func()函数运算,最后得到一个结果。

在python 3.0.0.0以后, reduce已经不在built-in function里了, 要用它就得from functools import reduce.
map的参数也类似,第一个参数是一个函数,第二个参数是一个可迭代对象。

map(str,n) 带入参数处理后会返回 (1,2,3,0,4,5,6),作为reduce的可迭代对象
根据reduce说明,首先1、2传入fol函数,得到1*10+2=12, 结果12和第三个数3再传入fol,得到123,……最终得到1230456,除以1000后应该是1230.456追问

你可能没看清问题。我对过程和结果没有疑问。只是,['123.456']不是一个只有一个元素的list吗?dict{'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9,'.': 0}怎么会认为这个list包括了1,2,3,。,4,5,6这7个元素,从而返回value?

追答

字符串当成列表、元组时,每个字符当成元素

不是传入的['123.456']

温馨提示:答案为网友推荐,仅供参考