所以任务很简单。读入一个字符串并将每个字符及其频率存储在字典中,然后返回字典。我用 for 循环很容易地做到了。
def getInputFreq():
txt = input('Enter a string value: ')
d = dict()
for c in txt:
d[c] = d.get(c,0) + 1
return d
问题是我需要使用映射和 lambda 重写此语句。 我已经尝试了一些东西,早期的尝试返回了空字典(代码在尝试中丢失了)。
我最近的尝试是(代替上面的 for 循环)
d = map((lambda x: (d.get(x,0)+1)),txt)
它返回一个 map 对象地址。
有什么建议吗?
最佳答案
首先,在 python 3 中,您必须在 map
上强制进行列表迭代
那么,您的方法将不起作用,您将得到全 1 或全 0,因为表达式不会累加计数。
您可以在 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
是执行此操作的首选方法。
关于python - 使用 map 和 lambda 计算字典中的频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47395676/