用多个其他字符串项目在集合中替换多个唯一的字符串项目



我有一组名称:

>>> 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
什么是用另一个值代替多个唯一字符串的Pythonic解决方案?

您可以使用差异和联合set操作一次删除/添加多个集元素,例如:

>>> 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'}

或使用集方法:

>>> 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'}

在这里使用python设置理解:

>>> 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'}

最新更新