Python:增加列表中存储的字典的值

时间:2016-01-12 09:59:21

标签: python list for-loop dictionary

这里有一个简单的例子:

我希望有一个列表,其中包含各类动物的词典。

印刷品应如下所示:

dictlist_animals = [{'type':'horse','amount':2},
                    {'type':'monkey','amount':2},
                    {'type':'cat','amount':1},
                    {'type':'dog','amount':1}]

因为有些动物不止一次存在,所以我添加了一个名为“数量”的钥匙,它应该计算出每种类型的动物有多少。

我不确定'if-case'是否正确以及我在'else case'中写了什么?

dictlist_animals = []

animals = ['horse', 'monkey', 'cat', 'horse', 'dog', 'monkey']


for a in animals:
    if a not in dictlist_animals['type']:
        dictlist_animals.append({'type': a, 'amount' : 1})

    else:
        #increment 'amount' of animal a

4 个答案:

答案 0 :(得分:4)

最好使用Counter。它是创建字典,其中键是动物列表的元素,值是它们的计数。然后,您可以使用列表推导来创建带字典的列表:

from collections import Counter

animals_dict = [{'type': key, 'amount': value} for key, value in Counter(animals).items()]

答案 1 :(得分:1)

尝试以下代码,

dictlist_animals = []

animals = ['horse', 'monkey', 'cat', 'horse', 'dog', 'monkey']
covered_animals = []
for a in animals:
    if a in covered_animals:
        for dict_animal in dictlist_animals:
            if a == dict_animal['type']:
                dict_animal['amount'] = dict_animal['amount'] + 1
    else:
        covered_animals.append(a)
        dictlist_animals.append({'type': a, 'amount' : 1})
print dictlist_animals

[{'amount': 2, 'type': 'horse'}, {'amount': 2, 'type': 'monkey'}, {'amount': 1, 'type': 'cat'}, {'amount': 1, 'type': 'dog'}]

答案 2 :(得分:1)

您无法直接在列表中调用dictlist_animals['type'],因为它们是以数字方式编制索引的。您可以做的是将这些数据存储在中间字典中,然后将其转换为您想要的数据结构:

dictlist_animals = []

animals = ['horse', 'monkey', 'cat', 'horse', 'dog', 'monkey']

animals_count = {};
for a in animals:
    c = animals_count.get(a, 0)
    animals_count[a] = c+1

for animal, amount in animals_count.iteritems():
    dictlist_animals.append({'type': animal, 'amount': amount})

请注意c = animals_count.get(a, 0)获取动物a的当前数量(如果存在),否则返回默认值0,这样您就不必使用if /否则声明。

答案 3 :(得分:1)

您也可以使用from collections import defaultdict d = defaultdict(int) for animal in animals: d[animal]+= 1 dictlist_animals = [{'type': key, 'amount': value} for key, value in d.iteritems()]

sync