我有一个这种格式的文件
[('misure', 'di', 'protezione'), ('libertà', 'di', 'espressione', 'di', 'popolo')]
我想要的是从元组中消除介词(di),并以相同的格式返回结果。所以我创建了这个函数来做到这一点
lista = myfilelist
prep = prepositionfile
li = ast.literal_eval(lista)
for i in li:
word = str(i)
ll = word.split("', '")
for w in ll:
lll= w.strip("('')")
if lll in prep:
i = word.replace(lll, "")
i.strip('')
print (nonlem(li))
但它以这种格式返回元组
[('misure', '', 'protezione'), ('libertà', '', 'espressione', '', 'popolo')]
所需的输出是
[('misure', 'protezione'), ('libertà', 'espressione', 'popolo')] ### without ''
答案 0 :(得分:2)
您可以使用ast.literal_eval
将字符串转换为元组列表
>>> from ast import literal_eval
>>> l = literal_eval("[('misure', 'di', 'protezione'), ('libertà', 'di', 'espressione')]")
然后使用列表理解从第一个和最后一个元素中生成新元组
>>> [(i[0], i[-1]) for i in l]
[('misure', 'protezione'), ('libertà', 'espressione')]
然后str
从元组列表中创建一个字符串
>>> str([(i[0], i[-1]) for i in l])
"[('misure', 'protezione'), ('libertà', 'espressione')]"
修改强>
如果要删除字符串'di'
的所有实例,这是相同的想法,您可以使用列表推导
>>> [tuple(i for i in j if i != 'di') for j in l]
[('misure', 'protezione'), ('libertà', 'espressione', 'popolo')]
编辑2
更一般地说,如果你想要排除<{1}}介词
set
答案 1 :(得分:1)
答案 2 :(得分:1)
[tuple(j for j in i if 'di' != j) for i in li]
我修改了sam2090代码,因为字符串'di'可以是像'dim'这样的单词的一部分