我有一本书,我将每个角色细分为对话,但是我注意到同一角色有很多错别字和不同的名字。我创建了一个词典,希望将每个别名重新关联到正确的字符,但是执行时遇到困难。这是我的熊猫系列和所需的输出:
Narrator ---> Output
Robert -----> Robert
Dan -----> Dan
Daniel -----> Daniel
Robbie -----> Robert
Rob -----> Robert
Jacob -----> Jacob
我的字典如下:
char_dict = {'Robert': ['Robert', 'Robbie', 'Rob'],
'Daniel': ['Daniel', 'Dan']}
我可以使用集合而不是字典中的列表来执行相同的操作吗?
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}
答案 0 :(得分:0)
是的,我只想撤消该命令:
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)
但是,这只是在做同样的事情-我会争辩更少的优雅代码。