2

およそ640のエントリを含むbibtexファイルがあります(上昇傾向)。私はこのファイルを維持するためにJabrefを使用しています。実際、私は物事を片付けて、Jabrefが助けられないようなことをしたいと思っています。だから私はコードを書いて、できるだけ柔軟にしようと思いました。

いくつかのタスクは、例えば、どの記事に「ファイル」エントリまたは「タイトル」エントリが欠落しているのか?同じファイルエントリを持つ記事など。

私のアプローチは、辞書のリストを作成することでした。辞書には、bibtexファイル内の1つの記事の情報が含まれています。例えば:

elements = [{
'author': 'Ando, K. and Ota, H. and Oki, T',
'comment': 'modelling, fundamental diagram, plane, cellular automata',
'file': 'Ando1988.pdf',
'issue': '2',
'journal': 'Railway R',
'owner': 'bob',
'timestamp': '2008.01.09',
'title': 'Forecasting the flow of people',
'type': 'ARTICLE',
'volume': '45',
'year': '1988'},
{'author': "Helbing, D. and Farkas, I. J. and Moln\\'{a}r, P. and Vicsek, T",
'booktitle': 'Pedestrian and Evacuation Dynamics',
'editor': 'Schreckenberg, Michael and Scharma, Som Deo',
'file': 'Helbing2002.pdf',
'key': 'Helbing2002',
'owner': 'jack',
'publisher': 'Springer',
'timestamp': '2007.12.12',
'title': 'Simulation of pedestrian crowds in normal and evacuation situations',
'type': 'INPROCEEDINGS',
'year': '2002'
}]

この構造で動作する私の関数は、常に次のようなもので始まります

for element in elements:
   do_stuff with element

私のコードは問題なく動作しますが、どういうわけか私は力ずくで物事をやっているような気がします。これが私が議論を始めてあなたに尋ねたい理由です:

  1. 私が使用しているもの(辞書のリスト)よりもすっきり/スマート/エレガントな構造はありますか?
  2. 情報の処理が容易になるように、データをどのように整理しますか。

編集:記事の種類(BOOK、PROCEEDINGS、ARTICLEなど)が異なるため、また私は人間であるため、辞書のキーとキーの数が異なる場合があります。

4

1 に答える 1

0

辞書は、予測できないキーと値のペアを処理するのに適しています。オブジェクトは、予測可能なキーと値のペアを処理するのに適しています(実際、Pythonでは、任意のプロパティを独自のオブジェクトに格納できます)。

クラスとオブジェクトがもたらす主な利点は次のとおりです。

  1. さまざまなタイプのエントリを事前に定義し、データがそのスキーマ、クラス、およびクラス階層に準拠していることを確認する場合は、これが簡単になります
  2. 各辞書の処理方法を理解することに依存する操作がたくさんある場合は、継承とポリモーフィック関数を使用して、これをよりクリーンにすることができます。
  3. コレクションを値としてハッシュテーブルに追加したい場合は、オブジェクトへのメソッドの記述が簡単になります。

簡単な場合は、クラス内のすべてのデータをdictに保持することもできます。

また、一連のコードをcodereview.stackexchangeに渡して、オブジェクトにリファクタリングするための提案が気に入ったかどうかを確認することもできます。

于 2012-11-29T17:09:13.753 に答える