计算字典中项目出现的频率并在字典本身中更新它

count frequencies of occurrences of items in a dictionary and update it in dictionary itself

我有一个字典 d 如下:

d
{'EventThread': [40002], 'kworker/u16:13': [80002], 'kworker/u16:0': [80002], 'AudioOut_D': [80002, 80002, 80002, 80002, 80002, 80002], 'putmethod.latin': [80002], 'surfaceflinger': [40002], 'InputDispatcher': [80002]}

我想要类似于:

d
{'AudioOut_D': [80002:6 ,40002:1]}

表示项目的频率

我试过下面的代码:

print((collections.Counter(d['AudioOut_D'])))
Counter({80002: 6})

但是如何将其更新为字典

TIA生成dict的代码如下:

self._sched_task_load_flags = defaultdict(list)
def sched_task_load_handler(self,thread):
        "accepts threads and builds corresponding threads and flags co-relation"
        _sched_task_load_flags = self._sched_task_load_flags
        try:
            while True:
                record = (yield)
                if "sched_task_load"==record["function"]:
                    flags = record["flags"]
                else:
                    print "error in sched_task_load_function_parse"
                    raise Exception

如何在下面的循环中组合两个操作:

e = {k: dict(Counter(v)) for k, v in d.iteritems()}

效果很好,但我还需要获取所有标志的列表,如下所示:

for k,v in flags.iteritems():
    list_of_all_flags.append(list(Counter(v)))

如何将以上两个循环组合在一个 TIA 中

是的,您可以对每个值应用 Counter() 方法:

from collections import Counter
e = {k: dict(Counter(v)) for k, v in d.iteritems()}

输出:

    {'AudioOut_D': {80002: 6},
 'EventThread': {40002: 1},
 'InputDispatcher': {80002: 1},
 'kworker/u16:0': {80002: 1},
 'kworker/u16:13': {80002: 1},
 'putmethod.latin': {80002: 1},
 'surfaceflinger': {40002: 1}}