2

我正在使用 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}...}

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

4

2 回答 2

6

我看不出这样做有什么意义,它Counter是所有方法的子类dict并支持它的所有方法,因此保持原样应该没有问题,尽管只是为了这个问题,我会将其转换回正常状态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
于 2012-07-31T00:43:56.807 回答
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'] 和您想要的格式访问的各个元素 - 只需添加代码。

于 2012-07-31T01:33:40.550 回答