我有此元组列表(POS标记),并且仅当它们位于元组的第二个元素中时,我才需要更改一些字符:
例如:
x = [('We', 'PRP'), ("'re", 'VBP'), ('really', 'RB$'), ('sorry', 'JJ'), ('...', ':')]
在此示例中,我需要更改第二个元素的“奇怪”字符:RB $和:。
我尝试过:
x_2[x.index(':')] = 'Dts'
和
x_2[x_2.index[,('$')]] = 'S'
我希望此输出:
x_2 = [('We', 'PRP'), ("'re", 'VBP'), ('really', 'RBS'), ('sorry', 'JJ'), ('...', 'Dts')]
预先感谢,如果这是一个非常基本的问题,对不起,我使用python很新。
答案 0 :(得分:1)
我不确定为什么应该更改这样的字符串,所以我不知道更改它们的逻辑,但是我只会保留需要更改内容的字典(除非有不同的逻辑并且除了此示例外,还需要更改更多的字符串)
to_change = {
':': 'Dts',
'RB$': 'RBS'
}
然后更改它们
x_2 = [(f, to_change.get(s, s)) for f,s in x]
答案 1 :(得分:1)
您可以使用翻译表。在Python 3中,您可以使用str
类中的maketrans
方法:
change = str.maketrans({"$": "S", ":": "Dts"})
通过调用translate
,您可以通过转换表将字符串中的值映射到转换表:
[(i, j.translate(change)) for i,j in x]
# [('We', 'PRP'), ("'re", 'VBP'), ('really', 'RBS'), ('sorry', 'JJ'), ('...', 'Dts')]
答案 2 :(得分:0)
尝试一下:
x1 = [(i,j.replace('$','S').replace(':','Dts')) for i,j in x]
输出:
[('We', 'PRP'), ("'re", 'VBP'), ('really', 'RBS'), ('sorry', 'JJ'), ('...', 'Dts')]
答案 3 :(得分:0)
一种方法:
a, b = zip(*x) # unzip into two lists
b = list(b) # make b a list, not a tuple, in order to be mutable
'''
change values
'''
b[b.index(':')] = 'Dts'
b[b.index[,('$')]] = 'S'
x = list(zip(a,b)) # zip back into an original looking list
答案 4 :(得分:0)
首先,重要的是要了解元组是不可变的,并且您不应尝试修改其内容。建议将x
转换成这样的dict,以便您可以修改dict的值,因为dict在Python中是可变的。
In [36]: y = dict(x)
In [37]: y
Out[37]: {'We': 'PRP', "'re": 'VBP', 'really': 'RB$', 'sorry': 'JJ'}
现在,您可以将所有符号存储在变量中,然后在字典y
中查找它们。只要找到符号,只要将其替换为''
空值即可。
In [38]: symbols = '$:;?'
In [39]: for k,v in y.items():
...: for symbol in symbols:
...: if symbol in v:
...: v = v.translate({ord(symbol):''})
...: y[k] = v
In [40]: y
Out[40]: {'We': 'PRP', "'re": 'VBP', 'really': 'RB', 'sorry': 'JJ'}
让我们在y中添加另一个在symbols
中定义的特殊符号:
In [41]: y['test'] = 'ZZ;'
In [42]: y
Out[42]: {'We': 'PRP', "'re": 'VBP', 'really': 'RB', 'sorry': 'JJ', 'test': 'ZZ;'}
因此,如果我将上述for循环代码放在函数modify_dict
中并调用,则test
元素的值也将被修改:
In [45]: modify_dict()
In [46]: y
Out[46]: {'We': 'PRP', "'re": 'VBP', 'really': 'RB', 'sorry': 'JJ', 'test': 'ZZ'}
要将其转换回元组列表:
In [55]: z = [(k,v) for k,v in y.items()]
In [56]: z
Out[56]:
[('We', 'PRP'),
("'re", 'VBP'),
('really', 'RB'),
('sorry', 'JJ'),
('test', 'ZZ')]