2016-02-14 2 views
0
origincount = { 
     'Bug': 0, 
     'Important': 0, 
     'User Story': 0, 
     'Critical': 0, 
     'Moderate': 0, 
     'Low': 0, 
     'story': 0 
    } 
    if epic['archived'] is False: 
     for story in stories: 
      if story['epic'] is not None and story['epic']['id'] == epic['id']: 
       counts = Counter(label['name'] for label in story['labels']) 
       origincount.update(counts) 

У меня возникли проблемы с пониманием обновлений словаря, когда значения нужно увеличивать вместе, а не просто «обновлять».Python - обновить значения словаря int, добавив из другого словаря Counter()

Из приведенного выше примера, когда происходит originincount.update (counts), он просто изменяет значение на все, что он подсчитывает. при следующем взгляде он делает то же самое.

Проблема в том, что мне нужно увеличить значение по подсчетам, а не просто заменить его.

Я пробовал перебирать счетчики и делал if, если против него не было 0, а затем добавление make originincount ['Bug'] = counts ['Bug'] + origincount ['Bug']. но это, казалось, терпит неудачу из-за моих собственных ошибок или просто совсем нет.

Update:

for epic in epics: 
    origin = Counter({ 
     'Bug': 0, 
     'Important': 0, 
     'User Story': 0, 
     'Critical': 0, 
     'Moderate': 0, 
     'Low': 0, 
     'story': 0 
    }) 

    if epic['archived'] is False: 
     for story in stories: 
      if story['epic'] is not None and story['epic']['id'] == epic['id']: 
       # story_total += 1 
       counts = Counter(label['name'] for label in story['labels']) 
       print(counts) 
       origin = origin + counts 

print(origin) 

Выход:

Counter({'Bug': 1, 'Important': 1}) 
Counter({'Critical': 1, 'Bug': 1}) 
Counter({'User Story': 1}) 
Counter({'Bug': 1}) 
Counter({'Bug': 1, 'Important': 1}) 
Counter({'Bug': 1, 'Important': 1}) 
Counter({'Critical': 1, 'Bug': 1}) 
Counter({'User Story': 1}) 
Counter({'User Story': 1}) 
Counter({'User Story': 1}) 
Counter({'User Story': 1}) 
Counter({'User Story': 1}) 
Counter({'User Story': 1}) 
Counter({'User Story': 1}) 
Counter({'User Story': 1}) 
Counter({'User Story': 1}) 
Counter({'User Story': 1}) 
Counter({'Critical': 1, 'Bug': 1}) 
Counter({'Critical': 1, 'Bug': 1}) 
Counter({'User Story': 1}) 
Counter({'User Story': 1}) 
Counter({'User Story': 1}) 
Counter({'User Story': 1}) 
Counter({'Critical': 1, 'Bug': 1}) 
Counter({'Critical': 0, 'User Story': 0, 'Important': 0, 'story': 0, 'Low': 0, 'Bug': 0, 'Moderate': 0}) 

Даже при преобразовании счетчика происхождения ДИКТ он еще не добавляет их.

+0

Вы можете просто добавить счетчики вместе –

+0

so origincount = origincount + counts? TypeError: неподдерживаемый тип операндов для +: 'dict' и 'Counter' the origincount не является счетчиком только dict – SudoGaron

+0

Проблема в том, что 'origincount' НЕ является' Counter'. Почему бы вам не сделать это? – timgeb

ответ

0

Я думаю, что это сработает, итерация начала координат, поскольку каждый проверяет, находится ли он в вашем другом счете, и если он затем обновляет значение originincount.

for key, value in origincount.items(): 
    if key in othercount.keys(): 
     origincount[key] = value + othercount[key] 
+0

Я перехожу к опции counter(), и по какой-то причине она по-прежнему не добавит значения. – SudoGaron

+0

Извините, я не использовал класс python Counter раньше. Мое решение состоит в объединении отсчетов из 2 отдельных словарей. –

0

На каждой итерации цикла показано, что вы объявляете и инициализируете новый объект Counter.

Я был бы готов поспорить, что он доходит до конца цикла, а затем исходные константы просто обнуляются на последней итерации.

Смежные вопросы