2013-04-25 47 views
1

是否有一種標準方式來表示包含Python中某些關係數據的表格?我的意思是,像這樣:將表格表示爲對象

 Singular Plural 
1st. I make  we make 
2nd. you make you make 
3d. he makes they make 

我想數據都通過行和列由可訪問,就像這樣:

1st. Singular -> I make 
1st.   -> I make, we make 
Plural 3d. -> they make 
Plural  -> we make, you make, they make 

我看不到任何方式來存儲數據有效,無冗餘。我能想到的更好的方法是使用多個字典(每行一個,每列一個),每個字典都包含與字典本身相關的行或列所包含的鍵數量,以及包含所有關聯的特殊鍵值。

我猜這樣的事情已經解決了,這就是爲什麼我問。

回答

4

作爲一種替代我的其他回答,您可以使用namedtuple通過@jamylak的建議:

from collections import namedtuple 

class Verb(namedtuple("_Verb", # arbitrary class name/tag 
         ["singular1", "singular2", "singular3", 
         "plural1", "plural2", "plural3"])): 
    @property 
    def singular(self): 
     return (self.singular1, self.singular2, self.singular3) 

    # similarly for plural 

    @property 
    def first_person(self): 
     return (self.singular1, self.plural1) 

    # similarly for 2nd and 3rd person 

現在「作」可以表示爲

Verb("make", "make", "makes", "make", "make", "make") 

再次,這可能是通過利用英語綴合的簡單性進行優化。

該解決方案的缺點是它不允許更改表中的單個字段,因爲namedtuple是不可變的。如果您想進行更改,請使用__slots__的普通class

+0

謝謝@jamylak糾正! – 2013-04-25 10:41:03

+0

我不知道這個「命名元組」的東西。看起來很方便。謝謝 ! – michaelmeyer 2013-04-25 10:42:40

2

可以由代表每個動詞爲平的元組擺脫冗餘:

("make", "make", "makes", "make", "make", "make") 

然後創建一個dict映射鍵索引:

ind_from_key = {'1st': (0, 3), 
       ..., 
       'singular': (0, 1, 2), 
       ..., 
       '1st singular': (0,)} 

當然,查詢得到位更復雜,因爲您必須進行間接查詢:

def conjugation(verb, conj): 
    indices = ind_from_key[conj] 
    return [CONJUGATION[verb][i] for i in indices] 

請注意,英語動詞的結合很簡單,可以進一步優化;複數形式在語法上總是相同的。

至於原始問題:不,在Python中沒有單一的標準關係數據表示方式。如果您的關係比口頭變體更復雜,並且您擁有大量數據,那麼您可能需要查看SQLite或其他數據庫解決方案,或許可以與SQLAlchemy一起使用。