我有一个文件,其内容如下所示:
eng word1
eng word2
eng word3
ita word1
ita word2
fra word1
...
我想统计每个单词在每种语言中出现的次数。为此,我想阅读字典中的文件。 这是我的尝试:
data = open('file', 'r', encoding='utf8')
for line in data:
lang = line[:3]
ipa_string = line[3:]
lang_and_string_dict[lang] = []
lang_and_string_dict[lang].append(ipa_string)
print(lang_and_string_dict)
这给了我一个带有正确键的字典,但只有最后一个单词,例如英语:
{'eng':[word1]}
最佳答案
好吧,每次您分配一个空列表作为值时:
data = open('file', 'r', encoding='utf8')
for line in data:
lang = line[:3]
ipa_string = line[3:]
<b>lang_and_string_dict[lang] = []</b>
lang_and_string_dict[lang].append(ipa_string)
print(lang_and_string_dict)
结果,包含前一次出现的旧列表丢失了。如果不存在这样的元素,您应该只创建一个列表,例如:
data = open('file', 'r', encoding='utf8')
for line in data:
lang = line[:3]
ipa_string = line[3:]
<b>if lang not in lang_and_string_dict:</b>
lang_and_string_dict[lang] = []
lang_and_string_dict[lang].append(ipa_string)
print(lang_and_string_dict)
由于这种模式很常见,您也可以使用 defaultdict
:
<b>from collection import defaultdict
<b>lang_and_string_dict = defaultdict(list)</b>
<b>with</b> open('file', 'r', encoding='utf8') as data:</b>
for line in data:
lang = line[:3]
ipa_string = line[3:]
lang_and_string_dict[lang].append(ipa_string)
print(lang_and_string_dict)
defaultdict
是 dict
的子类,它使用工厂(此处为 list
)以防丢失 key 。因此,每次查询不在字典中的键时,我们都会构造一个列表
。
您稍后可以使用 dict(lang_and_string_dict)
将此类 defaultdict
转换为 dict
。
此外,如果您打开(..)
文件,您最好使用with
block 来执行此操作。因为如果出现异常,那么文件仍然正确关闭。
关于python - 将文件转换为字典以计算出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50889852/