所以任务很简单。读入一个字符串,并将每个字符及其频率存储在字典中,然后返回字典。我用for循环很容易做到这一点。
def getInputFreq():
txt = input('Enter a string value: ')
d = dict()
for c in txt:
d[c] = d.get(c,0) + 1
return d
问题是我需要使用map和lambda重写此语句。我已经尝试了一些方法,早期尝试返回了空字典(尝试中的代码已丢失)。
我最近的尝试是(代替上面的for循环)
d = map((lambda x: (d.get(x,0)+1)),txt)
返回地图对象地址。
有什么建议么?
首先,在python 3中,您必须强制执行列表迭代 map
然后,您的方法将不起作用,您将获得全1或0,因为表达式不会累积计数。
您可以str.count
在lambda中使用,并将元组映射到字典,该字典可以工作:
txt = "hello"
d = dict(map(lambda x : (x, txt.count(x)), set(txt)))
结果:
{'e': 1, 'l': 2, 'h': 1, 'o': 1}
但是再次,这collections.Counter
是首选的方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句