Create a dictionary from a file
我正在创建一个允许用户输入自己选择的.txt文件的代码。例如,如果文本为:
"我就是你。你就是我。"
我希望我的代码创建一个类似于以下内容的字典:_i:2,am:1,you:2,are:1_
将文件中的单词显示为键,并将次数作为值。大小写应该不相关,所以are=are=are=are=etc…
这是迄今为止我的代码。有什么建议/帮助吗?
1 2 3 4 5 6 7 8 | >> file = input(" Please select a file") >> name = open(file, 'r') >> dictionary = {} >> with name: >> for line in name: >> (key, val) = line.split() >> dictionary[int(key)] = val |
看看这个答案中的例子:
python:dict列表,如果存在,则递增dict值,如果不附加新dict
你可以使用
下面是解决您的问题的代码。这将在Python3.1和更新版本中工作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | from collections import Counter import string def filter_punctuation(s): return ''.join(ch if ch not in string.punctuation else ' ' for ch in s) def lower_case_words(f): for line in f: line = filter_punctuation(line) for word in line.split(): yield word.lower() def count_key(tup): """ key function to make a count dictionary sort into descending order by count, then case-insensitive word order when counts are the same. tup must be a tuple in the form: (word, count) """ word, count = tup return (-count, word.lower()) dictionary = {} fname = input(" Please enter a file name:") with open(fname,"rt") as f: dictionary = Counter(lower_case_words(f)) print(sorted(dictionary.items(), key=count_key)) |
从您的示例中,我可以看到您希望去掉标点符号。因为我们要在空白处拆分字符串,所以我编写了一个函数,它将标点符号过滤为空白。这样,如果你有一个像
函数
当然,你不必打印分类后的字典,但我认为这样看起来更好。我做了排序,把最高的计数放在第一位,在计数相等的地方,把单词按字母顺序排列。
根据您的建议输入,这是结果输出:
1 | [('i', 2), ('you', 2), ('am', 1), ('are', 1)] |
号
由于排序,它总是按上面的顺序打印。