在Python你可以有兩個字符串的元組索引的字典,如
>>> d = {}
>>> d["foo","bar"] = 10
>>> d
{('foo', 'bar'): 10}
我不知道什麼是「強制執行非鋸齒」是指你,但你既可以使用一個defaultdict來返回默認值尚未明確設置的條目,或者與已知值初始化字典:
>>> xkeys = "abcdef"
>>> ykeys = "xyz"
>>> d = dict(((x,y), 0) for x in xkeys for y in ykeys)
>>> d
{('b', 'y'): 0, ('a', 'z'): 0, ('b', 'x'): 0, ('e', 'y'): 0, ('a', 'x'): 0, ('f', 'z'): 0, ('a', 'y'): 0, ('f', 'y'): 0, ('d', 'y'): 0, ('f', 'x'): 0, ('d', 'x'): 0, ('e', 'x'): 0, ('e', 'z'): 0, ('c', 'x'): 0, ('d', 'z'): 0, ('c', 'y'): 0, ('c', 'z'): 0, ('b', 'z'): 0}
如果要強制執行,只有在一組已知鍵被允許,那麼我建議子類字典內添加驗證。
是的,我不太瞭解Python。我不知道你可以做到這一點,但考慮到你基本上使用元組作爲關鍵,事後看來是有道理的。 – dsimcha 2010-02-11 20:09:23
這很好,但它會使用更多的內存來存儲我認爲是你不想要的部分的鍵。但是,它應該比我所建議的方法快一些,在訪問矩陣之前需要使用散列表查找來查找矩陣索引。速度或空間:這是一個問題。 – 2010-02-11 20:25:54
@Justin:這是個好主意,但我希望能有更好的答案。理想情況下,我想要一個「真正的」矩陣,我可以在其中獲得單列所有行,或單行所有列等,而不僅僅是一種解決方法。 – dsimcha 2010-02-12 03:11:34