所以任务很简单。读入一个字符串并将每个字符及其频率存储在字典中然后返回字典。我用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)
返回地图对象地址。
有什么建议吗?
答案 0 :(得分:7)
首先,在python 3中,你必须在map
然后,你的方法不会起作用,你会得到所有的或零,因为表达式不会累积计数。
你可以在lambda中使用str.count
,并将元组映射到一个有效的字典:
txt = "hello"
d = dict(map(lambda x : (x, txt.count(x)), set(txt)))
结果:
{'e': 1, 'l': 2, 'h': 1, 'o': 1}
但是再一次,collections.Counter
是首选方法。