Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中为字符串列表创建字典和整数键_Python_List_Dictionary_Token - Fatal编程技术网

在Python中为字符串列表创建字典和整数键

在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

我有一个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_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]]