我有一个包含'A' 'B' 'C'等术语的set()。我想要一个二维关联数组,这样我就可以执行如下操作:d['A']['B'] += 1
。在Python中,最好的方法是使用字典嵌套字典。是否有更好的方法?
我有一个包含'A' 'B' 'C'等术语的set()。我想要一个二维关联数组,这样我就可以执行如下操作:d['A']['B'] += 1
。在Python中,最好的方法是使用字典嵌套字典。是否有更好的方法?
有两种明显的解决方案:一种是使用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})
>>>
一个字典的字典是一种方式。
另一种方法是简单地使用元组:
d[('A','B')] += 1
d['A','B'] += 1
array
/numpy
)。 - SingleNegationElimination使用字典的字典有什么不好的理由吗?毕竟它可以实现你想要的功能(尽管请注意,在Python中没有 ++
这样的东西)。
在使用字典的字典方面,没有任何风格上的问题或者不符合Pythonic的地方。