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

标签 python dictionary lambda

所以任务很简单。读入一个字符串并将每个字符及其频率存储在字典中,然后返回字典。我用 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/

相关文章:

python - 漂白回车

c# - MongoDB 在 InsertOne 上抛出 "MongoDB.Bson.BsonSerializationException"

python - 将字典内容与 Object 进行比较

java - 流 : Calculate the difference of totals in one go

C# 将参数传递给 Lambda

python - 如何从 JSON 获取字符串对象而不是 Unicode

python - 通过欧拉方法预测抛射运动的问题

Python 命令行 - 多行输入

android - 没有标签的离线世界卫星 map (Android)

java - 使用方法引用定义 BroadcastReceiver.onReceive