这里有一个简单的例子:
我希望有一个列表,其中包含各类动物的词典。
印刷品应如下所示:
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
答案 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