2017-08-24 1 views
0

J'ai une liste de listes. Je suis en mesure de générer les bigrammes de la liste intérieure et il a l'air comme ci-dessous:Remplacer la virgule par "_" soulignement dans bigrams python

[[('bacteria', 'agricultur'), ('agricultur', 'soil'), ('soil', 'presenc'), ('presenc', 'sampl')],[('bacteria', 'agricultur'), ('agricultur', 'soil'), ('soil', 'presenc'), ('presenc', 'sampl')],[('nodul', 'uragensi')], [('nodul', 'stem'), ('stem', 'nodul')], [('deform', 'morphoid')]]

Maintenant, je dois remplacer la virgule dans le tuple bigramme à celle avec le trait de soulignement que je suis incapable de le faire. Donc, le résultat devrait ressembler à

[[(bacteria_agricultur), (agricultur_soil), (soil_presenc), (presenc_sampl)],[(bacteria_agricultur), (agricultur_soil), (soil_presenc), (presenc_sampl)],[(nodul_uragensi)], [(nodul_stem), (stem_nodul)], [('deform'_'morphoid')]]

Quand j'utilise joindre il me donne l'erreur

texts = ["_".join(word) for word in texts] 

Erreur:

TypeError: sequence item 0: expected str instance, tuple found 

Comment puis-je produire la sortie ci-dessus? Merci

Répondre

1

Vous pouvez simplement utiliser une compréhension de la liste imbriquée:

In [446]: [['_'.join(y) for y in x] for x in lst] 
Out[446]: 
[['bacteria_agricultur', 'agricultur_soil', 'soil_presenc', 'presenc_sampl'], 
['bacteria_agricultur', 'agricultur_soil', 'soil_presenc', 'presenc_sampl'], 
['nodul_uragensi'], 
['nodul_stem', 'stem_nodul'], 
['deform_morphoid']] 

Si vous insistez sur les parenthèses, vous pouvez créer un seul élément tuples ainsi:

In [447]: [[('_'.join(y),) for y in x] for x in lst] 
Out[447]: 
[[('bacteria_agricultur',), 
    ('agricultur_soil',), 
    ('soil_presenc',), 
    ('presenc_sampl',)], 
[('bacteria_agricultur',), 
    ('agricultur_soil',), 
    ('soil_presenc',), 
    ('presenc_sampl',)], 
[('nodul_uragensi',)], 
[('nodul_stem',), ('stem_nodul',)], 
[('deform_morphoid',)]] 
0
NewData=[] 
for bigrams in lists: 
    for grams in bigrams: 
     NewData.append(str(grams).replace("'","").replace(", ","_")))