我在alist里面有一个alist,看起来是这样的:
sub_count = [[['Farm', u'Red Hat Enterprise Linux for Virtual Datacenters with Smart Management, Premium'], 2], [['Farm', u'Red Hat Enterprise Linux for Virtual Datacenters with Smart Management, Standard'], 2], [['Farm', u'Red Hat Enterprise Linux for Virtual Datacenters with Smart Management, Premium'], 1]]我需要什么,以获得一个新的字典与农场为关键字,以及订阅名称列表
即Red Hat Enterprise Linux for Virtual Datacenter with Smart Management、Premium/standard和每个订阅的订阅摘要
示例:
dic = {Farm:[Red Hat Enterprise Linux for Virtual Datacenters with Smart Management, Premium,3][Red Hat Enterprise Linux for Virtual Datacenters with Smart Management, Standard,2]}注意:我已经尝试创建一个新的列表,并尝试下面的方法来获得我作为list的结果,但没有得到正确的结果,实际上我更喜欢adict:
['Farm', u'Red Hat Enterprise Linux for Virtual Datacenters with Smart
Management, Premium', 2, 'Farm', u'Red Hat Enterprise Linux for Virtual
Datacenters with Smart Management, Standard', 2, 'Farm', u'Red Hat Enterprise
Linux for Virtual Datacenters with Smart Management, Premium', 1]
list2 = []
for i in list1:
if i not in list2:
if not isinstance(i, (int, long)):
list2.append(i)
if isinstance(i, (int, long)):
count = 0
count = count + i:
list2.append(count)获取:
['Farm', u'Red Hat Enterprise Linux for Virtual Datacenters with Smart Management, Premium', 2, u'Red Hat Enterprise Linux for Virtual Datacenters with Smart Management, Standard', 1]请提供一种方法来获得上述示例中的dic
发布于 2018-02-15 23:18:56
您可以使用int的defaultdict的defaultdict
from collections import defaultdict
d = defaultdict(lambda: defaultdict(int))
for (a, b), c in sub_count:
d[a][b] += c结果是(为了可读性,省略了defaultdict-specific标记)
{'Farm': {'Red Hat Enterprise Linux for Virtual Datacenters with Smart Management, Premium': 3,
'Red Hat Enterprise Linux for Virtual Datacenters with Smart Management, Standard': 2})})发布于 2018-02-15 23:20:17
我已经这样做了:
a_dict =defaultdict(dict)
for x in sub_count:
if a_dict[x[0][0]].get(x[0][1]):
a_dict[x[0][0]][x[0][1]] += x[1]
else:
a_dict[x[0][0]][x[0][1]] = x[1]下面是输出:
defaultdict(dict,
{'Farm': {u'Red Hat Enterprise Linux for Virtual Datacenters with Smart Management, Premium': 3,
u'Red Hat Enterprise Linux for Virtual Datacenters with Smart Management, Standard': 2}})发布于 2018-02-15 23:24:23
您可以使用itertools.groupby
import itertools
sub_count = [[['Farm', u'Red Hat Enterprise Linux for Virtual Datacenters with Smart Management', 'Premium'], 2], [['Farm', u'Red Hat Enterprise Linux for Virtual Datacenters with Smart Management', 'Standard'], 2], [['Farm', u'Red Hat Enterprise Linux for Virtual Datacenters with Smart Management', 'Premium'], 1]]
final_data = {a:[zip(*list(d)) for c, d in itertools.groupby(sorted(list(b), key=lambda x:x[0][-1]), key=lambda x:x[0][-1])] for a, b in itertools.groupby(sub_count, key=lambda x:x[0][0])}
new_final_data = {a:[i[0]+[sum(c)] for i, c in b] for a, b in final_data.items()}输出:
{'Farm': [['Farm', u'Red Hat Enterprise Linux for Virtual Datacenters with Smart Management', 'Premium', 3], ['Farm', u'Red Hat Enterprise Linux for Virtual Datacenters with Smart Management', 'Standard', 2]]}https://stackoverflow.com/questions/48810273
复制相似问题