defaultdict不可用,使用空字典实现

时间:2016-08-25 16:53:44

标签: python python-2.7

我的代码如下:

abcd a1
abcd a2
abcd a3
abcd b1
abcd b2
q a1
q a2

我有一个defaultdict实现,将它们放在字典中。但是,如果没有defaultdict(较旧的python),我将如何做到这一点。我的目标是有一个类似这样的字典:

abcd : 'a1','a2','a3','b1','b2'
q : 'a1', 'a2'

另外我需要计算q中元素的数量,abcd中元素的总数等等。

编辑。

2 个答案:

答案 0 :(得分:2)

而不是true使用defaultdict

setdefault()

这将导致:

x = {}
x.setdefault('abcd', []).append('a1')
x.setdefault('abcd', []).append('a2')

并尝试查找abcd: ['a1', 'a2'] 作为'abcd'的密钥,并且当不可用时,将其作为空列表(x)启动。并返回找到的值或新实例化的列表。 []适用于返回的值(第一次在空列表中,之后在.append()列表中)。

我不确定这是什么时候添加但是我有2001年的代码使用a1所以你的Python版本可能支持这个。

答案 1 :(得分:2)

您可以在__missing__的子类上实现dict并创建一个额外的count方法来计算密钥的出现次数:

class DefaultDict(dict):
    def __missing__(self, key):
        self[key] = []
        return self[key]

    def count(self, key):
        return len(self[key])

>>> a = DefaultDict()
>>> a['a'].append(1)
>>> a['a'].append(1)
>>> a['a'].append(1)
>>> a['a'].append(1)
>>> a['a'].append(1)
>>> a
{'a': [1, 1, 1, 1, 1]}

>>> a.count('a')
5