字典理解和创建期间检查键

时间:2011-03-17 09:29:17

标签: python dictionary list-comprehension

我有这个任务来读取文件,将每个字符存储在dict中作为键并为每个找到的键增加值,这导致代码如下:

chrDict = {}
with open("gibrish.txt", 'r') as file:
    for char in file.read():
        if char not in chrDict:
            chrDict[char] = 1
        else:
            chrDict[char] += 1

所以这项工作正常,但对我来说,至少在Python中,这看起来真的很难看。我尝试了不同的理解方式。有没有办法通过理解来做到这一点?我尝试在创建过程中使用locals(),但这似乎真的很慢,而且如果我已经理解了正确的东西,那么本地人将包括启动理解的范围内的所有内容,使事情变得更难。

3 个答案:

答案 0 :(得分:7)

Python 2.7 中,您可以使用Counter

from collections import Counter

with open("gibrish.txt", 'r') as file:
    chrDict = Counter(f.read())

答案 1 :(得分:4)

使用defaultdict:

from collections import defaultdict

chr_dict = defaultdict(int)
with open("gibrish.txt", 'r') as file:
    for char in file.read():
        chr_dict[char] += 1

如果你真的想使用列表推导,你可以使用这个低效的变体:

text = open("gibrish.txt", "r").read()
chr_dict = dict((x, text.count(x)) for x in set(text))

答案 2 :(得分:0)

字典get()方法将返回值(如果存在)或者返回0.

chrDict = {}
with open("gibrish.txt", 'r') as file:
   for char in file.read():
        chrDict[char] = chrDict.get(char, 0) + 1