我有一组名称:
>>> 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'}