一次替换多个其他字符串项中的多个唯一字符串项

时间:2017-09-26 09:09:41

标签: python python-3.x list set

我有一组名字:

>>> 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解决方案?

2 个答案:

答案 0 :(得分:1)

您可以使用differenceunion 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'}

或者使用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 :(得分: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'}