使用map和lambda来计算字典中的频率

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)

它返回一个地图对象地址.

有什么建议?

Jea*_*bre 7

首先,在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是做到这一点的首选方式.

  • 如何`list(map(lambda x:x,[]))或dict(Counter('hello'))`,满足使用map和lambda的要求;) (3认同)