python - 根据现有词典制作词典列表

标签 python python-2.7 list dictionary

编写了一个脚本来获取每个用户在 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/

相关文章:

python - 按值对 python 字典列表进行分组

python - 为什么单层感知器在没有归一化的情况下收敛如此之慢,即使边距很大?

python - 使用 python 中的 PyQt5 按下按钮时更改 QML 中的标签

Python - 属性错误 : 'function' object has no attribute 'deepcopy'

javascript - 在 python-vtk/three.js 中居中多数据模型的轴/枢轴

r - r : pandas not found 中的 python

python - 读取中间有一列字符串的 csv 文件

python - Django - 字符串到日期 - 日期到 UNIX 时间戳

python - 一次从列表中删除多个索引 - python

python - 使用 Python 比较列表?