2

我有一个 bibtex 文件,其中包含大约 640 个条目(上升趋势)。我使用 Jabref 来维护这个文件。实际上,我想收拾东西,做一些 Jabref 无能为力的事情。所以我想写一个代码并尽可能灵活。

一些任务是例如哪些文章缺少“文件”条目或“标题”条目?哪些文章具有相同的文件条目等。

我的方法是填充字典列表。字典包含 bibtex 文件中一篇文章的信息。例如:

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. 您将如何组织数据以使处理信息变得更容易。

编辑:我想提一下,由于文章类型不同(书籍、程序、文章等),而且我只是人类,字典可能有不同的键和不同数量的键。

4

1 回答 1

0

字典非常适​​合处理不可预测的键值对。对象非常适合处理可预测的键值对(事实上,在 Python 中,您可以在自己的对象中存储任意属性)。

类和对象可能给您的主要优势:

  1. 如果您想预先定义不同类型的条目,并检查您的数据是否符合该模式、类和类层次结构,这将使这更容易
  2. 如果您有很多操作依赖于弄清楚如何处理每个字典,那么这可能会通过继承和多态函数变得更清晰。
  3. 如果你发现你想将集合作为值添加到你的哈希表中,你可能会开始发现在对象上编写方法更容易。

如果您觉得这样更容易,您还可以将类中的所有数据保存在 dicts 中。

您还可以将一堆代码带到 codereview.stackexchange,看看您是否喜欢他们关于重构为对象的建议。

于 2012-11-29T17:09:13.753 回答