我有一本书,我已经分解为每个角色的对话,但我注意到有相同的字符有很多拼写错误和不同的名字。我创建了一个字典,希望将每个别名关联回正确的字符,但我执行起来很麻烦。这是我的熊猫系列和所需的输出:
Narrator ---> Output
Robert -----> Robert
Dan -----> Dan
Daniel -----> Daniel
Robbie -----> Robert
Rob -----> Robert
Jacob -----> Jacob
我的字典如下:
char_dict = {'Robert': ['Robert', 'Robbie', 'Rob'],
'Daniel': ['Daniel', 'Dan']}
我已经使用过这段代码,它确实让我得到了一个工作输出,但很难快速查看并理解哪些名称与哪个字符相关联。有更有效的方法吗?
new_char_dict = {k: oldk for oldk, oldv in char_dict.items() for k in oldv}
是的我会反驳这个词:
rev = {c:k for k, v in char_dict.items() for c in v}
如果原始字典值是列表或集合(或元组),则此字典理解将起作用。
然后将其映射到列:
df["Output"] = df["Narrator"].map(rev)
这对我来说似乎是最有效的方法。但是,如果您主要关心的是使代码尽可能具有人类可读性,那么您可以将字典理解分解为标准for循环:
alias_to_name = dict()
for char_name, list_of_aliases in char_dict.items():
for char_alias in list_of_aliases:
alias_to_name[char_alias] = char_name
df["Output"] = df["Narrator"].map(alias_to_name)
但这只是做同样的事情 - 我会争辩 - 不那么优雅的代码。