python:从defaultdict中删除类型
我有以下代码:python:从defaultdict中删除类型,python,dictionary,defaultdict,Python,Dictionary,Defaultdict,我有以下代码: #!/usr/bin/python farm_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
#!/usr/bin/python
farm_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]]
from collections import defaultdict
d = defaultdict(lambda: defaultdict(int))
for (a, b), c in farm_sub_count:
d[a][b] += c
print( dict(d) )
print( dict.__repr__(d) )
我得到以下输出:
{Farm - defaultdict(<type 'int'>, {u'Red Hat Enterprise Linux for Virtual Datacenters with Smart Management, Standard': 2, u'Red Hat Enterprise Linux for Virtual Datacenters with Smart Management, Premium': 3})
我看了其他三种,他们建议将其转换为dic:
print( dict(d) )
或
我仍然得到类型您有一个嵌套结构,一个defaultdict
包含defaultdict
实例。您只转换了最外层的对象;您需要创建一个深度副本
您可以生成一个新的词典,该词典具有dict理解功能,以创建一个2级深度的副本:
{k: dict(v) for k, v in d.items()}
或者,在不使用defaultdict
对象的情况下构建数据结构:
d = {}
for (a, b), c in farm_sub_count:
inner = d.setdefault(a, {})
inner[b] = inner.get(b, 0) + c
具有两个“for”循环:
输出是
{'Farm': [{'Red Hat Enterprise Linux for Virtual Datacenters with Smart Management, Premium': 3}, {'Red Hat Enterprise Linux for Virtual Datacenterswith Smart Management, Standard': 2}]}
您只需使用print(d)
,无需调用\uuu repr\uu
unbound方法。即使dict
有一个\uuu str\uuuuu
方法,也应该使用repr(d)
,或d.\uu repr\uuuuuu()
,然后再使用dict.\uu repr\uuud)
。
d = {}
for (a, b), c in farm_sub_count:
inner = d.setdefault(a, {})
inner[b] = inner.get(b, 0) + c
from collections import defaultdict
d = defaultdict(lambda: defaultdict(int))
for (a, b), c in farm_sub_count:
d[a][b] += c
objArray = []
printobj = {}
finalobj = {}
for i in d:
for k in d[i]:
printobj = {k : d[i][k]}
objArray.append(printobj)
finalobj= {i: objArray}
print(finalobj)
{'Farm': [{'Red Hat Enterprise Linux for Virtual Datacenters with Smart Management, Premium': 3}, {'Red Hat Enterprise Linux for Virtual Datacenterswith Smart Management, Standard': 2}]}