簡體   English   中英

我應該使用哪種Python數據結構?

[英]Which Python data structure should I use?

有人可以為下述的FinalResults推薦最佳的數據結構:

我正在從XML文檔中提取各種信息。 大致上,這就是我的工作:首先使用find_all查找包含關鍵字的text元素。 然后針對每個結果:

  1. 獲取text元素的父標簽
  2. 得到那個父母的屬性,並且
  3. 使用正則表達式在text元素的內容中搜索其他文本。

最后一次搜索產生的結果最多包含6個匹配組。

整個操作可能最終返回如下內容:

FinalResult 1: [parent, parent-attr, match.group(1), match.group(2) ... ,match.group(6)]

FinalResult 2: [parent, parent-attr, match.group(1), match.group(2) ... ,match.group(6)]

我可能沒有最大數量的FinalResults 但是平均而言,我希望每個XML文檔少於10個。 我計划將每個FinalResult用於其他處理,但不會在FinalResults進行更改或添加任何FinalResults 例如,我可能會說:返回具有XYZ屬性的<parent>並獲取其他數據,然后從其他位置獲取一個名為match.group(2)的文件。

我可能只會訪問幾次FinalResult。 如果重要的話,其中一些match.groups可能是“ None”

這是一個例子。 假設這是FinalResult [0]: ['paragraph', '39871234', '42', '103', 'b', '1', None, None]

段落將是包含我發現的關鍵字的標簽的父標簽。 39871234將是段落標簽42的id屬性,指示卷號103是該卷b中的一個部分,而1是該部分的細分

我將使用42/103 / b / 1從另一個xml文件中提取信息。 如果我需要告訴一個關鍵詞搜索結果與另一個關鍵詞的搜索結果,則將使用段落和ID,因為該文件將包含多個文本元素。 (例如, Paragraph id=39871234 text [string containing keyword]

我的問題是我應該將所有FinalResults存儲為字典,列表,元組還是其他東西?

一個真正的數據結構建議問題對數據結構應該做什么或可以幫助您實現一些實際要求。 在您的問題中沒有任何此類信息的情況下,我想您正在尋找的簡單直接的答案是:

在任何現代的面向對象語言中,表示一組相關屬性的標准方法是使用getter和setter方法創建一個簡單的類(除非對象在創建后是不可變的,否則設置屬性的唯一方法是首次實例化其包含對象時)。

您的例子表明了一類attribute() parent_attribute()matches()方法,其中前兩個顯然會返回簡單的字符串,而最后,字符串列表。 您的主程序可能包含這些對象的一個​​或多個列表,或者可能是一個字典,其中包含要用於訪問先前對象的功能(標識屬性?)

class Match (object):
    def __init__ (self, attrib, parent_attr, matches):
        self.attrib, self.parent_attr, self.matches = attrib, parent_attr, matches

    def attribute (self):
        return self.attrib

    def parent_attribute (self):
        return self.parent_attr

    def matches (self):
        return self.matches

列表的好處應該立即顯而易見:您的代碼不是match[0]而是顯示了match.attribute() ,它可以立即傳達正在發生的事情。

相對於dict而言,好處並不明顯,但在實踐中經常需要為之准備:當您想要重構代碼時,更改類實現是比更改代碼使用的每個位置都更簡單的一項任務。這些實例。

因此,例如,如果出於某種奇怪的原因,您意識到在使用該類一段時間后想要使用一個列表,則只需更改初始化代碼和getter,而無需更改處理這些實例的每段代碼; 並且幕后實現的詳細信息對於使用此類的任何代碼都是完全透明的。

模塊化設計還有許多其他好處。 如果您需要更多詳細信息,請找到一個很好的OOP簡介。

如果這種設計的性能不能令人滿意,那么可能會有一個新的問題,那就是一些實際要求(速度,內存等)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM