理解字典计数器和重构python代码
Comprehension dictionary counter and refactoring python code
我正在自学 Python,我开始重构 Python 代码以学习新的高效编码方法。
我试图为 word_dict
做一个理解词典,但我没有找到实现它的方法。我遇到了两个问题:
- 我尝试使用
word_dict[word]:=word_dict[word]+1
在我的理解词典中添加 word_dict[word] += 1
- 我想使用
if word not in word_dict
检查该元素是否已经在理解词典(我正在创建)中,但它没有用。
理解词典为:
word_dict = {word_dict[word] := 0 if word not in word_dict else word_dict[word] := word_dict[word] + 1 for word in text_split}
这是代码,它读取文本并计算其中的不同单词。如果您知道更好的方法,请告诉我。
text = "hello Hello, water! WATER:HELLO. water , HELLO"
# clean then text
text_cleaned = re.sub(r':|!|,|\.', " ", text)
# Output 'hello Hello water WATER HELLO water HELLO'
# creates list without spaces elements
text_split = [element for element in text_cleaned.split(' ') if element != '']
# Output ['hello', 'Hello', 'water', 'WATER', 'HELLO', 'water', 'HELLO']
word_dict = {}
for word in text_split:
if word not in word_dict:
word_dict[word] = 0
word_dict[word] += 1
word_dict
# Output {'hello': 1, 'Hello': 1, 'water': 2, 'WATER': 1, 'HELLO': 2}
欢迎来到Python。有图书馆馆藏 (https://docs.python.org/3/library/collections.html),其中有一个名为 Counter 的 class。这似乎很可能适合您的代码。那是一个镜头吗?
from collections import Counter
...
word_dict = Counter(text_split)
现在您正在使用正则表达式删除一些不需要的字符,然后在空格处拆分以获得单词列表。为什么不使用正则表达式来立即获取单词呢?您还可以利用 collections.Counter
创建字典,其中键是单词,关联值是 counts/occurrences:
import re
from collections import Counter
text = "hello Hello, water! WATER:HELLO. water , HELLO"
pattern = r"\b\w+\b"
print(Counter(re.findall(pattern, text)))
输出:
Counter({'water': 2, 'HELLO': 2, 'hello': 1, 'Hello': 1, 'WATER': 1})
>>>
这是正则表达式模式的组成部分:
\b
- 表示一个单词边界(不会包含在匹配中)
\w+
- 集合 [a-zA-Z0-9_]
. 中的一个或多个字符
\b
- 另一个单词边界(也不会包含在匹配中)
我正在自学 Python,我开始重构 Python 代码以学习新的高效编码方法。
我试图为 word_dict
做一个理解词典,但我没有找到实现它的方法。我遇到了两个问题:
- 我尝试使用
word_dict[word]:=word_dict[word]+1
在我的理解词典中添加 - 我想使用
if word not in word_dict
检查该元素是否已经在理解词典(我正在创建)中,但它没有用。
word_dict[word] += 1
理解词典为:
word_dict = {word_dict[word] := 0 if word not in word_dict else word_dict[word] := word_dict[word] + 1 for word in text_split}
这是代码,它读取文本并计算其中的不同单词。如果您知道更好的方法,请告诉我。
text = "hello Hello, water! WATER:HELLO. water , HELLO"
# clean then text
text_cleaned = re.sub(r':|!|,|\.', " ", text)
# Output 'hello Hello water WATER HELLO water HELLO'
# creates list without spaces elements
text_split = [element for element in text_cleaned.split(' ') if element != '']
# Output ['hello', 'Hello', 'water', 'WATER', 'HELLO', 'water', 'HELLO']
word_dict = {}
for word in text_split:
if word not in word_dict:
word_dict[word] = 0
word_dict[word] += 1
word_dict
# Output {'hello': 1, 'Hello': 1, 'water': 2, 'WATER': 1, 'HELLO': 2}
欢迎来到Python。有图书馆馆藏 (https://docs.python.org/3/library/collections.html),其中有一个名为 Counter 的 class。这似乎很可能适合您的代码。那是一个镜头吗?
from collections import Counter
...
word_dict = Counter(text_split)
现在您正在使用正则表达式删除一些不需要的字符,然后在空格处拆分以获得单词列表。为什么不使用正则表达式来立即获取单词呢?您还可以利用 collections.Counter
创建字典,其中键是单词,关联值是 counts/occurrences:
import re
from collections import Counter
text = "hello Hello, water! WATER:HELLO. water , HELLO"
pattern = r"\b\w+\b"
print(Counter(re.findall(pattern, text)))
输出:
Counter({'water': 2, 'HELLO': 2, 'hello': 1, 'Hello': 1, 'WATER': 1})
>>>
这是正则表达式模式的组成部分:
\b
- 表示一个单词边界(不会包含在匹配中)\w+
- 集合[a-zA-Z0-9_]
. 中的一个或多个字符
\b
- 另一个单词边界(也不会包含在匹配中)