Python Counter()为现有键添加值

时间:2016-02-24 04:13:21

标签: python dictionary

developer_base = Counter({
        'user1': {'XS': 0, 'S': 0, 'M': 0, 'L': 0, 'XL': 0},
        'user2': {'XS': 0, 'S': 0, 'M': 0, 'L': 0, 'XL': 0},
        'user3': {'XS': 0, 'S': 0, 'M': 0, 'L': 0, 'XL': 0},
        'user4': {'XS': 0, 'S': 0, 'M': 0, 'L': 0, 'XL': 0},
    })

循环以收集计数器数据:

for y in time_list:
                story_size = models.get_specific_story(y['story_id'])
                if story_size is not "?":
                    counts = Counter(y['minutes_spent'])
                    print(counts)
                    developer_base = developer_base + counts

Counter应该成为for循环的一部分吗? story_size总是等于嵌套字典中的一个键(S,XS,M等)。 time_list具有['minutes_spent'],这是需要添加到字典中的值。问题似乎是time_list有一个嵌套的dict,它是['user'] ['first_name'],它等于user1到user4的developer_base键。

所以我需要为每个用户添加time_list中的所有'minutes_spent'。

更新:JSON数据

[{'project_slug': 'test', 'project_id': 19855, 'date': '2016-02-11', 'task_name': None, 'iteration_name': 'test', 'notes': '', 'user_id': 81946, 'story_id': 392435, 'iteration_id': 76693, 'story_name': 'test', 'user': {'id': 81946, 'last_name': 'test', 'first_name': 'user1', 'email': 'test', 'username': 'test'}, 'project_name': 'Development', 'id': 38231, 'minutes_spent': 240}]

数据要大得多,但这只是一个整体。

1 个答案:

答案 0 :(得分:1)

在第一个代码段中,您正在滥用Counter。该片段仅适用于Python 2中的怪癖,可以比较dicts。计数器的值应该是数字。

同样,y['minutes_spent']是一个整数,Counter(y['minutes_spent'])只会抛出一个错误。此外,story_size is not "?" does not do what you expect

假设真正的问题是

  

为每个用户添加time_list中的所有'minutes_spent'。

然后你可以使用一个计数器:

from collections import Counter
c = Counter()
for y in time_list:
    c[y['user']['id']] += y['minutes_spent']