Манипулирование элементами набора счетчиков без использования двойного цикла for (предпочтительно для понимания списка) - PullRequest
0 голосов
/ 08 октября 2019

поэтому у меня есть dict, который принимает строки в качестве ключей и сопоставляет их со счетчиками string->count, что выглядит примерно так:

defaultdict(collections.Counter,
            {'': Counter({'<S>': 2,
                      '=': 2,
                      'chronicles': 1,
                      'iii': 1,
                      'no': 1,
                      'senjō': 1,
                      'valkyria': 2}),
             '<S>': Counter({'<S>': 1, '=': 1}),
             '<S> <S>': Counter({'=': 1}), 

Так что единственный способ, которым я могу это сделать, этовыполняя двойной цикл for доступа к строкам, а затем доступа к значениям счетчика и деления на сумму значений этого соответствующего счетчика. Пример: s - это просто список всех строк в dict, и затем я нахожу сумму значений счетчика в этой строке, а затем снова делаю цикл по ключам, деля их на sum_val.

for s in voc:  
  sum_val = sum(lm[s].values())
  for k in lm[s].keys():
    lm[s][k] = lm[s][k]/sum_val

Проблема этого подхода заключается в том, что он занимает слишком много времени (в действительности никогда не получалось выводить данные для большого набора данных);у кого-нибудь есть другой подход (может быть, понимание списка)? Я не совсем уверен, как понимание списка работает со счетчиками, так что если кто-то может помочь, это было бы здорово!

...