2012-07-31 89 views
2

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

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

回答

5

我没有看到这样做的任何一点,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

或者用字典理解:'{k:dict(v)for k,v in tp.iteritems()}' – Blender 2012-07-31 00:44:38

+0

@Blender我保持交叉兼容,但我也将其作为选项加入:) – jamylak 2012-07-31 00:45:26

+0

重点是我不希望每个人都将单词作为关键字,这是计数器函数的标准返回。但感谢解决方案!另外,我会很高兴让它保持原样,但是如何访问括号内的键和计数值? – adohertyd 2012-07-31 00:45:34

0

您可能正在寻找一种漂亮的打印方法。

这是一种方法,包括:

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':

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]['x']=123 
pprint_counter(tp) 

打印:

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

所以,你可以用脚标访问各个元素直接`TP [1] [ 'X'],你的愿望格式化 - 只需添加代码。