我有一组名字:
>>> 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解决方案?
答案 0 :(得分:1)
您可以使用difference和union 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'}