shr*_*sva 4 python associative-array
我有一个set(),其中包含'A''B''C'这样的术语.我想要一个2维关联数组,以便我可以执行类似的操作d['A']['B'] += 1.做这个的pythonic方式是什么,我正在思考一个dicts的决定.有没有更好的办法.
Sin*_*ion 10
有两个明显的解决方案:一,使用defaultdict在另一个dict中自动嵌套dict
>>> d = collections.defaultdict(dict)
>>> d['a']['b'] = 'abc'
>>> d
defaultdict(<type 'dict'>, {'a': {'b': 'abc'}})
>>>
Run Code Online (Sandbox Code Playgroud)
另一种是tuples用于你的dict键:
>>> d = {}
>>> d['a','b'] = 'abc'
>>> d
{('a', 'b'): 'abc'}
>>>
Run Code Online (Sandbox Code Playgroud)
要获得该+=行为,请替换defaultdict(int)上面的dicts:
>>> 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})
>>>
Run Code Online (Sandbox Code Playgroud)
有什么理由不使用字典的字典吗?++毕竟,它可以满足您的需求(尽管请注意,Python 中没有这样的东西)。
使用字典的字典并没有什么风格上的糟糕或非 Pythonic 的地方。