编写了一个脚本来获取每个用户在 AWS 上运行的实例列表。我有一个字典列表。我想排序并列出每个用户运行的实例数(list_instances
)。
list_instances=[{'type': u't2.small', 'user': u'user1'},
{'type': u'm4.large', 'user': u'user1'},
{'type': u't2.medium', 'user': u'user1'},
{'type': u't2.small', 'user': u'user1'},
{'type': u'm4.large', 'user': u'user1'},
{'type': u't2.small', 'user': u'user1'},
{'type': u'm4.large', 'user': u'user2'},
{'type': u'm4.large', 'user': u'user3'},
{'type': u't2.medium', 'user': u'user2'},
{'type': u't2.medium', 'user': u'user2'},
{'type': u't2.small', 'user': u'user3'}]
创建了包含用户名和实例类型的两个列表。
names_list=[u'user1', u'user2', u'ben', u'user3', u'user4']
type_list=[u't2.small', u'm4.large', u'm4.large', u't2.medium', u't2.small', u'm4.large', u'm4.large', u't2.small']
尝试:
val = 0
final_instances=[]
for ii in names_list:
temp_dic = {}
for jj in type_list:
for kk in list_instances:
if (ii == kk['user']) and (jj in kk):
#print ii,kk['user'],jj,kk,kk[jj]
temp_dic['user']=kk['user']
temp_dic[jj]=val+kk[jj]
final_a.append(temp_dic)
print (final_instances)
我没有得到如下所示的预期输出。我的逻辑无法有效获得预期结果。有人可以帮我解决这个问题吗?提前致谢!
目标:
final_instances=
[{'user':u'user1','t2.small':'3','m4.large':'2','t2.medium':'1'}
{'user': u'user2','m4.large': '1','t2.medium': '2'}
{'user': u'user3','2.small': '1','m4.large': '1'}]
最佳答案
您可以使用 collections.Counter
在按用户分组您的原始字典列表后进行计数:
from collections import Counter
from operator import itemgetter
from itertools import groupby
from pprint import pprint
f = itemgetter('user')
lst = []
for k, g in groupby(sorted(list_instances, key=f), f):
c = Counter({u'user': k})
c.update([d['type'] for d in g])
lst.append(dict(c))
pprint(lst)
[{u'm4.large': 2, u't2.medium': 1, u't2.small': 3, u'user': u'user1'},
{u'm4.large': 1, u't2.medium': 2, u'user': u'user2'},
{u'm4.large': 1, u't2.small': 1, u'user': u'user3'}]
如果您希望计数以字符串形式结束,您可以使用字典理解在追加到列表之前在计数器中转换值。
...
d = {k: str(v) for k, v in c.items()}
lst.append(d)
关于python - 根据现有词典制作词典列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43006459/