2017-02-07 10 views
0

я имею в Словаре д, как показано ниже:подсчета частоты появлений элементов в словаре и обновлять его в самом словаре

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

, но затем, как обновить это в dictionay

код ТИА для того, как генерировать 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))) 

как можно сочетать выше двух петель в одном ТИА

+0

Прежде всего '{» AudioOut_D ': [80002: 6, 40002: 1]} 'не является действительным синтаксисом Python, **' [80002: 6, 40002: 1] '** не имеет смысла – ZdaR

+0

Я хотел сказать, что мне нужно количество/частота события вместе с его типом – R2D2

ответ

2

Да, вы можете применить 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}} 
+0

Я хочу объединить две операции с вышеописанным циклом, поскольку минимумы: – R2D2