bet*_*ter 4 python lambda dictionary
所以任务很简单.读入一个字符串并将每个字符及其频率存储在字典中然后返回字典.我用for循环很容易做到了.
def getInputFreq():
txt = input('Enter a string value: ')
d = dict()
for c in txt:
d[c] = d.get(c,0) + 1
return d
Run Code Online (Sandbox Code Playgroud)
问题是我需要使用map和lambda重写这个语句.我尝试了一些事情,早期尝试返回空字典(代码在尝试中丢失了).
我的最新尝试是(取代上面的for循环)
d = map((lambda x: (d.get(x,0)+1)),txt)
Run Code Online (Sandbox Code Playgroud)
它返回一个地图对象地址.
有什么建议?
首先,在python 3中,你必须强制列表迭代 map
然后,你的方法将无法工作,你将获得所有的或零,因为表达式不会累积计数.
您可以str.count
在lambda中使用,并将元组映射到字典,该字典有效:
txt = "hello"
d = dict(map(lambda x : (x, txt.count(x)), set(txt)))
Run Code Online (Sandbox Code Playgroud)
结果:
{'e': 1, 'l': 2, 'h': 1, 'o': 1}
Run Code Online (Sandbox Code Playgroud)
但再一次,这collections.Counter
是做到这一点的首选方式.
归档时间: |
|
查看次数: |
918 次 |
最近记录: |