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}]}