Python中的二维关联数组

6

我有一个包含'A' 'B' 'C'等术语的set()。我想要一个二维关联数组,这样我就可以执行如下操作:d['A']['B'] += 1。在Python中,最好的方法是使用字典嵌套字典。是否有更好的方法?


你能给一个带有期望结果的例子吗? - joaquin
3个回答

14

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

>>> d = collections.defaultdict(dict)
>>> d['a']['b'] = 'abc'
>>> d
defaultdict(<type 'dict'>, {'a': {'b': 'abc'}})
>>> 
另一种方法是仅使用元组作为字典的键:

tuples

>>> 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})
>>> 

4

一个字典的字典是一种方式。

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

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

正如TokenMacGuy所指出的,括号是可选的:
d['A','B'] += 1

根据你的代码,这可能会简化事情。

不需要使用括号,Python会自动将逗号分隔的项目索引创建为元组(主要是为了支持array/numpy)。 - SingleNegationElimination

3

使用字典的字典有什么不好的理由吗?毕竟它可以实现你想要的功能(尽管请注意,在Python中没有 ++ 这样的东西)。

在使用字典的字典方面,没有任何风格上的问题或者不符合Pythonic的地方。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接