Python中的二维关联数组

时间:2011-07-14 16:02:13

标签: python associative-array

我有一个set(),其中包含'A''B''C'这样的术语。我想要一个二维关联数组,以便我可以执行像d['A']['B'] += 1这样的操作。做这个的pythonic方式是什么,我正在思考一个dicts的决定。有没有更好的方法。

3 个答案:

答案 0 :(得分:10)

有两个明显的解决方案:一,使用defaultdict在另一个字典中自动嵌套一个字典

>>> d = collections.defaultdict(dict)
>>> d['a']['b'] = 'abc'
>>> d
defaultdict(<type 'dict'>, {'a': {'b': 'abc'}})
>>> 

另一种方法是只使用tuples作为你的dict键:

>>> d = {}
>>> d['a','b'] = 'abc'
>>> d
{('a', 'b'): 'abc'}
>>> 

要获得+=行为,请将defaultdict(int)替换为上述词语:

>>> d = collections.defaultdict(lambda:collections.defaultdict(int))
>>> d['a']['b'] += 1
>>> d
defaultdict(<function <lambda> at 0x18d31b8>, {'a': defaultdict(<type 'int'>, {'b': 1})})
>>> 
>>> d = collections.defaultdict(int)
>>> d['a','b'] += 1
>>> d
defaultdict(<type 'int'>, {('a', 'b'): 1})
>>> 

答案 1 :(得分:3)

有没有理由不使用词典?它会做你想要的(尽管注意到Python中没有++这样的东西),毕竟。

没有任何风格上的穷人或非Pythonic关于使用dicts的词典。

答案 2 :(得分:3)

dict的词典是单向的。

另一种方法是简单地使用元组:

d[('A','B')] += 1

正如TokenMacGuy所指出的,括号是可选的:

d['A','B'] += 1

根据您的代码,这可能会简化操作。