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

时间:2017-11-20 15:37:39

标签: 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

问题是我需要使用map和lambda重写这个语句。 我尝试了一些事情,早期尝试返回空字典(代码在尝试中丢失了)。

我最近的尝试是(取代上面的for循环)

 d = map((lambda x: (d.get(x,0)+1)),txt)

返回地图对象地址。

有什么建议吗?

1 个答案:

答案 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是首选方法。