在Python中为字符串列表创建字典和整数键
我有一个unicode字符串列表 每个字符串列表表示一个不同的文档,其中的字符串表示作者的姓名。一些文档只有一个作者,而其他文档可以有多个共同作者 例如,三个文档的作者身份示例如下所示:在Python中为字符串列表创建字典和整数键,python,list,dictionary,token,Python,List,Dictionary,Token,我有一个unicode字符串列表 每个字符串列表表示一个不同的文档,其中的字符串表示作者的姓名。一些文档只有一个作者,而其他文档可以有多个共同作者 例如,三个文档的作者身份示例如下所示: authors = [[u'Smith, J.', u'Williams, K.', u'Daniels, W.'], [u'Smith, J.'], [u'Williams, K.', u'Daniels, W.']] 我想把我的列表转换成字典和列表 首先,为每个名称提供整数键的字典: author_nam
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_to_id = {name: id for id, name in author_name.items()}
doc_author = [[author_to_id[name] for name in doc] for doc in authors]
演示:
你已经有了
author\u name
dictionary,还是你也要创建它?没有。我需要创建它。有什么建议吗?我不确定我是否正确理解了你的问题:你的意思是将作者
中最长的列表转换成字典吗?如果是,请尝试author\u name=dict(枚举(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\u name=dict(枚举(max(authors,key=len))
不会捕获新作者u'Johnson,A'嗯,运行import itertools;author\u name=[];在itertools.chain(*authors)中为name运行:如果name不在author\u name:author\u name.append(name)
,那么author\u name=dict(枚举(max(author\u name,key=len))
。
>>> 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.'}
>>> author_to_id = {name: id for id, name in author_name.items()}
>>> [[author_to_id[name] for name in doc] for doc in authors]
[[0, 1, 2], [0], [1, 2]]