python
1import fileinput 2import re 3import json 4from operator import itemgetter 5from matplotlib import pyplot as plt 6from matplotlib.font_manager import FontProperties 7 8def remove_markup(str): 9 str1 = re.sub(r"{{.*?}}", "", str) 10 str1 = re.sub(r"[[", "", str1) 11 str1 = re.sub(r"]]", "", str1) 12 str1 = re.sub(r"<a href=.*?>", "", str1) 13 str1 = re.sub(r"<ref[^>]*/>", "", str1) 14 str1 = re.sub(r"<ref[^>]*>.+</ref>", "", str1) 15 return str1 16 17 18if __name__ == '__main__': 19 docs = {} 20 for line in fileinput.input('-'): 21 obj = json.loads(line) 22 docs[obj['title']] = obj['text'] 23 for lines in docs[obj['title']].split('\t'): 24 removed_str = remove_markup(lines) 25 line_number = 0 #行数 26 allkanji = 0 27 line_number += 1 28 rkan = re.compile("[一-龥]") 29 foundkanji = rkan.findall(removed_str) 30 oneline_kanji = len(foundkanji) / len(lines) #漢字の割合 31 allkanji += oneline_kanji 32 per = round((allkanji / line_number) * 100, 1) 33 result = obj['title'], '\t', per, '%' 34 print(result)
print(result)をperの値を降順にしたもので表示したいです。
sort()やsorted()などを使ったのですがエラーしか出ませんでした
辞書にperというキーを追加してこのようにしました
data = sorted(docs.items(), key=lambda docs: docs['per'])
エラーはこのようなエラーです
File "kadai.py", line 49, in <module>
data = sorted(docs.items(), key=lambda docs: docs['per'])
File "kadai.py", line 49, in <lambda>
data = sorted(docs.items(), key=lambda docs: docs['per'])
TypeError: tuple indices must be integers or slices, not str