我在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}...}
如果那是不可能的,有人可以告诉我如何访问()里面的嵌套词典吗?谢谢
答案 0 :(得分: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
答案 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']来访问的各个元素以及你想要的格式化 - 只需添加代码。