4

Python で 3 つの列を持つテーブルを作成し、後で必要に応じて値を取得したいと考えています。私は辞書がそれを行うための最良の方法であると考えています。これには、2 つの値へのキー マッピングがあります。

|column1 |  column 2     | column 3   | 

|  MAC   |  PORT NUMBER  |    DPID    |

|  Key   |  Value 1      | Value 2    |

提案された方法:

// グローバル学習テーブルを定義します globe_learning_table = defaultdict(set)

// MAC アドレスをキーとしてスイッチのポート番号と dpid を追加 // この場合、packet.src は MAC アドレスを提供します globe_learning_table[packet.src].add(event.port) globe_learning_table[packet.src].add(dpid_to_str(connection.dpid))

// MAC アドレスに基づいて DPID の値を取得 globe_learning_table[packket.src][????]

1 つのキーが 2 つの値を指しているかどうか、そのキーに関連付けられた特定の値を取得する方法がわかりません。

この動的テーブルを作成し、必要に応じて特定の値を提供できる場合は、他のデータ構造も使用できます。

4

5 に答える 5

0

2 つの異なる目的が混同されていると思います。代表的なデータ構造が必要であり、(私が読んだように)それを読み取り可能な形式で印刷したいと考えています。表として印刷されるものは、コンピューターの内部に 2 次元で保存されるわけではありません。テーブルのプレゼンテーションは視覚的な比喩です。

あなたが達成したいことについて私が正しいと仮定すると、私がそれを行う方法は、a) シンプルに保ち、b) 適切なモジュールを使用して労力を節約することです。

あなたの情報を正しく表す最も単純なデータ構造は、私の意見では、辞書内の辞書です。このような:

foo = {'00:00:00:00:00:00': {'port':22, 'dpid':42},
       '00:00:00:00:00:01': {'port':23, 'dpid':43}}

私が見つけた手早く汚れた表を印刷するための最良のモジュールはprettytableです。コードは次のようになります。

foo = {'00:00:00:00:00:00': {'port':22, 'dpid':42},
       '00:00:00:00:00:01': {'port':23, 'dpid':43}}

t = PrettyTable(['MAC', 'Port', 'dpid'])
for row in foo:
    t.add_row([row, foo[row]['port'], foo[row]['dpid']])

print t
于 2013-06-25T17:16:50.283 に答える