在Python3.x中使用Counter()
,我创建了一个脚本,它可以计算文本文件中的字符数,然后为每个文件输出一个python字典。
import glob
from collections import Counter
files = glob.glob("*.txt")
for f in files:
for line in f:
filename, contents = line.strip().split()
results[filename] = Counter(line)
这是输出:
{ "textfile1.txt": Counter({'C': 23426, 'T': 5111, ' ': 4231, 'l': 3321, 'G': 353, '4': 2987797, 'R': 2, 'B': 223185, 'r': 186587}) }
键值对的值包括Counter()
内的键值对,它显示每个字符的计数器数,例如"character": # of characters
。
我的问题:鉴于这些值,我如何只选择某些字符,例如仅限C
和T
并删除所有其他人。
我的想法是某种列表理解:
dictionary1 # original dictionary above
correct_keys = ["C", "T"]
corrected_dictionary1 = {k: v for k, v in dictionary1.values().split if values in correct_keys}
这并不是很有效;这是错误:
AttributeError: 'dict_values' object has no attribute 'split'
答案 0 :(得分:1)
你几乎就在那里,你需要运行第一个dict,他的密钥是文件名,然后通过内部dict运行,最后检查它是否在correct_keys
from collections import Counter
dictionary1 = { "textfile1.txt": Counter({'C': 23426, 'T': 5111, ' ': 4231, 'l': 3321, 'G': 353, '4': 2987797, 'R': 2, 'B': 223185, 'r': 186587}),
"textfile2.txt": Counter({'C': 23427, 'T': 5112, ' ': 4231, 'l': 3321, 'G': 353, '4': 2987797, 'R': 2, 'B': 223185, 'r': 186587})}
correct_keys = ["C", "T"]
def filter_dict_results(items):
tmp_dict = [{k : v} for k,v in items if k in correct_keys]
ret = {}
for elem in tmp_dict:
ret.update(elem)
return [ret]
corrected_dictionary1 = [res_dict for (k, v) in dictionary1.items() for res_dict in filter_dict_results(v.items())]
print corrected_dictionary1
<强>输出:强>
[{'C': 23426, 'T': 5111}, {'C': 23427, 'T': 5112}]