【问题标题】:Removing 'Counter' from Dictionary python从字典python中删除“计数器”
【发布时间】:2012-07-31 00:40:57
【问题描述】:

我正在使用 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 和括号 ( and ),以便我的字典看起来像:

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

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

【问题讨论】:

    标签: python dictionary counter


    【解决方案1】:

    我看不出这样做有什么意义,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
    

    【讨论】:

    • 或者用字典理解:{k: dict(v) for k, v in tp.iteritems()}
    • @Blender 我一直保持交叉兼容,但我也会将其添加为选项:)
    • 重点是我不希望每个单独返回的单词都作为键,这是 counter 函数的标准返回。但感谢您的解决方案!另外,我很乐意保持原样,但是如何访问括号内的键和计数值?
    • @adohertyd 不确定你的意思。
    • @adohertyd 类似d[1][u'b']
    【解决方案2】:

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

    这是一种方法:

    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'] 访问的各个元素以及您想要的格式 - 只需添加代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-23
      • 1970-01-01
      • 1970-01-01
      • 2016-03-19
      • 2012-07-01
      • 1970-01-01
      相关资源
      最近更新 更多