从Dictionary python中删除'Counter'

时间:2012-07-31 00:40:57

标签: python dictionary counter

我在Python中使用Counter类来计算大型python字典的键中的单词数。我正在创建一个新的字典,其中键是递增的数字,值是计数器函数的返回值。这就是我的新词典:

TP = {1:Counter({u'x':1, u'b':1, u'H':3}),2:Counter({u'j':1, u'm':4, u'e':2})...}

我想要做的是,如果可能的话,删除Counter和括号(和),以便我的字典看起来像:

TP = {1:{u'x':1, u'b':1, u'H':3}, 2:{u'j':1, u'm':4, u'e':2}...}

如果那是不可能的,有人可以告诉我如何访问()里面的嵌套词典吗?谢谢

2 个答案:

答案 0 :(得分:6)

我没有看到这样做的任何意义,Counterdict的子类并且支持它的所有方法所以你应该没有任何问题离开它,尽管只是为了这个缘故我将把它转换回正常的dict

>>> from collections import Counter
>>> tp = {1:Counter({u'x':1, u'b':1, u'H':3}),2:Counter({u'j':1, u'm':4, u'e':2})}
>>> dict((k, dict(v)) for k, v in tp.iteritems())
{1: {u'x': 1, u'b': 1, u'H': 3}, 2: {u'e': 2, u'j': 1, u'm': 4}}

对于Python 2.7+(由@Blender建议)

{k: dict(v) for k, v in tp.iteritems()}

通过子句进行迭代,例如:

for w, c in tp[1].iteritems():
    print w, c

答案 1 :(得分:0)

你可能正在寻找一种漂亮的印刷方法。

这是一种方法:

def pprint_counter(c):
    for k, v in c.items():
        l=[u'{}:{}'.format(ks,vs) for ks,vs in v.items()]
        print '{:4}: {}'.format(k, ' '.join(l))

现在用你的例子测试:

tp = {1:Counter({u'x':1, u'b':1, u'H':3}),2:Counter({u'j':1, u'm':4, u'e':2})}
pprint_counter(tp)

打印:

   1: x:1 b:1 H:3
   2: m:4 j:1 e:2

现在访问子元素'x':

tp[1]['x']=123
pprint_counter(tp)

打印:

   1: x:123 b:1 H:3
   2: m:4 j:1 e:2

所以你通过直接订阅`tp [1] ['x']来访问的各个元素以及你想要的格式化 - 只需添加代码。