Python 字典理解和在创建过程中检查键
我的任务是读取一个文件,将每个字符作为键存储在dict中,并为每个找到的键增加值,这导致代码如下: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 所以这很好,但对我来说
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的计数器:计数器似乎是一个非常好的选项。非常感谢。