Python 字典理解和在创建过程中检查键

Python 字典理解和在创建过程中检查键,python,dictionary,list-comprehension,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 所以这很好,但对我来说

我的任务是读取一个文件,将每个字符作为键存储在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(),但这似乎非常缓慢,而且如果我正确理解了任何内容,locals将包括启动理解的范围内的所有内容,这会使事情变得更加困难。

使用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))
使用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))

在Python 2.7中,您可以使用:


在Python 2.7中,您可以使用:

Dictionary get()方法将返回值(如果存在),否则返回0

chrDict = {}
with open("gibrish.txt", 'r') as file:
   for char in file.read():
        chrDict[char] = chrDict.get(char, 0) + 1
Dictionary get()方法将返回值(如果存在),否则返回0

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

这里有一个反向移植到Python2.5的计数器:计数器似乎是一个非常好的选项。非常感谢。这里有一个反向移植到Python2.5的计数器:计数器似乎是一个非常好的选项。非常感谢。