【发布时间】:2016-10-06 04:48:16
【问题描述】:
我有一个 unicode 字符串列表。
每个字符串列表代表一个不同的文档,其中的字符串代表作者的姓名。有些文档只有一位作者,而其他文档可以有多个共同作者。
例如,三个文档的作者身份示例如下所示:
authors = [[u'Smith, J.', u'Williams, K.', u'Daniels, W.'], [u'Smith, J.'], [u'Williams, K.', u'Daniels, W.']]
我想将我的列表转换成字典和列表。
首先,一个为每个名字提供一个整数键的字典:
author_name = {0: u'Smith, J.', 1: u'Williams, K.', 2: u'Daniels, W.'}
其次,通过整数键标识每个文档的作者的列表:
doc_author = [[0, 1, 2], [0], [1, 2]]
创建这些最有效的方法是什么?
仅供参考:我需要这种格式的作者数据来运行用 Python 编写的预先构建的作者主题 LDA 算法。
【问题讨论】:
-
你已经有
author_name字典,或者你也要创建它? -
没有。我需要创建它。有什么建议吗?
-
我不确定我是否正确理解了您的问题:您的意思是将
authors中最长的列表转换为字典吗?如果是这样,请尝试author_name = dict(enumerate(max(authors, key=len)))。 -
不一定。如果您假设有一个新作者的附加文档,那么该方法就会失效。例如,假设
authors = [[u'Smith, J.', u'Williams, K.', u'Daniels, W.'], [u'Smith, J.'], [u'Williams, K.', u'Daniels, W.'], [u'Johnson, A']]则author_name = dict(enumerate(max(authors, key=len))没有捕获新作者 u'Johnson, A' -
呵呵,运行
import itertools; author_name = []; for name in itertools.chain(*authors): if name not in author_name: author_name.append(name),然后运行author_name = dict(enumerate(max(author_name, key=len))。
标签: python list dictionary token