一次

2017-09-26 19 views
1

一组与多个其他字符串项的多个唯一的字符串替换的项目我有一组名称:一次

>>> name_set = {'A.C. Johnson', 
'Adrian Jefferson', 
'Albus Jung', 
'Al Frank', 
'Alex English', 
'Allen Peters'} 
>>> type(name_set) 
set 

一些名字的需要进行调整。例如,我需要:

name_set = {'A.C. Johnson15', 
'Adrian Jefferson', 
'Albus Jung', 
'Al Frank', 
'Alex English40', 
'Allen Peters35'} 

我已经试过:

name_set.remove("A.C. Johnson") 
name_set.add("A.C. Johnson15") 

我试图避免再次发生这类^所以
我也试过:

fixed_name_set = [name.replace('A.C. Johnson', 'A.C. Johnson15') for name in name_set] 

这^是一行,但仍需要重复来替换多个名称。所以我想是这样:

fixed_name_set = [name.replace(('A.C. Johnson', 'A.C. Johnson15'), ('Alex English', 'Alex English40')) for name in combined_top_players] 

一个解决类似这样的^将是理想的,但收益率TypeError: Can't convert 'tuple' object to str implicitly
什么是Python的解决方案,与另一个值替换多个唯一字符串?

回答

1

您可以使用differenceunionset操作删除/一次添加多个集合中的元素,如:

>>> name_set = {'A.C. Johnson15', 'Adrian Jefferson', 'Albus Jung', 'Al Frank', 'Alex English40', 'Allen Peters35'} 
>>> name_set - {'A.C. Johnson', 'Alex English'} | {'A.C. Johnson15', 'Alex English40'} 
{'Albus Jung', 'A.C. Johnson15', 'Allen Peters35', 'Al Frank', 'Adrian Jefferson', 'Alex English40'} 

或者使用set方法:

>>> name_set.difference(['A.C. Johnson', 'Alex English']).union(['A.C. Johnson15', 'Alex English40']) 
{'Albus Jung', 'A.C. Johnson15', 'Allen Peters35', 'Al Frank', 'Adrian Jefferson', 'Alex English40'} 
1

这里使用python可读的方式set comprehension

>>> to_fix = { 'A.C. Johnson': 'A.C. Johnson15', 
...   'Alex English': 'Alex English40' } 
>>> name_set = {'A.C. Johnson', 
... 'Adrian Jefferson', 
... 'Albus Jung', 
... 'Al Frank', 
... 'Alex English', 
... 'Allen Peters'} 
>>> new_nameset = { to_fix.get(x,x) for x in name_set } 

目前,new_nameset包含:

{'Adrian Jefferson', 
'Allen Peters', 
'Al Frank', 
'Albus Jung', 
'Alex English40', 
'A.C. Johnson15'}