如何对Python字典值进行子集化,并删除其他值?

2024-04-25 22:09:42 发布

您现在位置:Python中文网/ 问答频道 /正文

在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)

输出如下:

^{pr2}$

键值对的值包括Counter()内的键值对,该键值对显示每个字符的计数器数,例如"character": # of characters。在

我的问题:给定这些值,我如何只选择某些字符,例如C和{}并删除所有其他字符。在

我的想法是某种列表理解:

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'

Tags: inimportforlinecounterfileskeysfilename
1条回答
网友
1楼 · 发布于 2024-04-25 22:09:42

你就快到了,你需要运行第一个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

输出:

^{pr2}$

相关问题 更多 >