Python 打印到文件。使用 defaultdict 排序

Python printing to a file. Sorting with defaultdict

我有一些代码:

filename = "training_data.txt"
with open(filename,'r') as infile:
     d = defaultdict(lambda: defaultdict(int))
     tagRE = re.compile(r'[A-Za-z]+/[A-Z]+')
     for line in infile:
         for token in tagRE.findall(line):
             word, tag = token.split("/")
             d[word][tag] += 1

f = open('out.txt', 'w')           
for word, word_data in d.items():
    f.write(word + " " + " ".join(tag + ":" + str(freq) + '\n'
    for tag, freq in word_data.items()))    

训练数据是词性标记的文本,例如

Today/NN ,/, PC/NN shipments/NNS annually/RB total/VBP some/DT $/$ 38.3/CD billion/CD world-wide/JJ ./.

写入文件的文本应采用以下格式:word: part-of-speech:frequency 如果一个词有多个标签,则此标签和频率位于同一行。目前,如果一个词有多个标签,则换行符将标签放在新行上。我愿意:

1) 将这些放在同一行,例如 意思是 VBP:7 JJ:1 NN:2 VB:27

2) 按降序打印这些频率。我的数据结构是否允许这样做?我不知道该怎么做。

谢谢!

tagfreq = " ".join(tag + ":" + str(freq) 
           for tag, freq in 
           sorted(word_data.items(), key=lambda x: x[1], reversed=True))
w = ''.join([word, " ",  tagfreq, '\n'])
f.write(w) 

通常对字符串使用 join 而不是 +。将 \n 移动到 write 的末尾,并按频率降序排列 items