在python3.5中将字符串转换为元组

时间:2018-05-21 10:02:48

标签: python python-3.x

但现在我希望将其转换为以下元组格式:

((1231, 123), (2341, 1210), (342,12), (5462, 565))

我真的需要找到一种方法将这些数据转换为上面的格式。我非常感谢任何帮助!

如何将字符串转换为元组对?我已经尝试了这个

with open("data.txt") as f:
    list = [line.rstrip('\n') for line in f] 
    mylist = [mylist[x:x+1] for x in range(0, len(mylist), 3)]
    print(mylist)


data = ['I went to work but got delayed at other work and got stuck in a traffic and I went to drink some coffee but got no money and asked for money']

我希望我的输出采用这种格式

[('i', 'went'),('to', 'work'),('but', 'got').........]

我试过这个但没有工作

import itertools
import nltk
import collections
f=open('readme.txt','r')
data=f.read()
print(data)
d1 = data[0].split() 
output = list(itertools.zip_longest(d1[::2],d1[1::2],fillvalue = None)) 
print(output)

从评论中编辑 - 文件内容:

['भिन्केन NNP डच NNP प्रकाशन NN समूह NN एल्सेभियर NNP एन.भी. FB को PKO अध्यक्ष NN हुनुहुन्छ VBF । YF कन्सोलिडेटिड NNP गोल्ड NN फिल्ड्स NN पीएलसी NNP का PKO पूर्व JJ सभापति NN ५५ CD वर्षीय JJ रूडोल्फ NNP अग्न्यु NNP लाई PLAI यस DUM ब्रिटिस NNP औद्योगिक JJ समूह NN को PKO सल्लाहकार NN को PKO रूप NN मा POP मनोनयन NN गरिएको VBKO थियो VBX । YF एकताका RBO केन्ट NNP चुरोट NN को PKO फिल्टर NN बनाउन VBI प्रयोग NN भएको VBKO एक CD प्रकार NN को PKO अस्बेस्टोस NNP '] 

2 个答案:

答案 0 :(得分:2)

您可以使用itertools.zip_longest  通过提供一个默认值(如果没有另外指定则为None),它也适用于压缩不均匀冗长的列表:

您在空格处分割数据并将子列表提供给zip:一旦从0开始,一次从1开始,两者仅使用其他所有(第二)元素:

data = ['I went to work but got delayed at other work and got stuck in a traffic and I went to drink some coffee but got no money and asked for money']

import itertools
d1 = data[0].split() 

# use 2 partial lists, using every 2nd word, once staring at 0, once at 1
# you can change   fillvalue=None   to some other value or remove it - None is the default.
output = list(itertools.zip_longest(d1[::2],d1[1::2], fillvalue = None)) 

print(output)

输出:

[('I', 'went'), ('to', 'work'), ('but', 'got'), ('delayed', 'at'), ('other', 'work'), 
 ('and', 'got'), ('stuck', 'in'), ('a', 'traffic'), ('and', 'I'), ('went', 'to'), 
 ('drink', 'some'), ('coffee', 'but'), ('got', 'no'), ('money', 'and'), 
 ('asked', 'for'), ('money', None)]

馈送到zip_longest的子列表如下:

print(d1[::2])

['I', 'to', 'but', 'delayed', 'other', 'and', 'stuck', 'a', 'and', 'went', 'drink', 
 'coffee', 'got', 'money', 'asked', 'money']

print(d1[1::2])

['went', 'work', 'got', 'at', 'work', 'got', 'in', 'traffic', 'I', 'to', 'some', 
 'but', 'no', 'and', 'for']

以下部分改编自Convert string representation of list to list

# -*- coding: utf-8 -*-

import ast

# create your file as utf8
with open("myfile.txt","w", encoding="utf8") as f:
    f.write("['भिन्केन NNP डच NNP प्रकाशन NN समूह NN एल्सेभियर NNP एन.भी. FB को PKO अध्यक्ष NN हुनुहुन्छ VBF । YF कन्सोलिडेटिड NNP गोल्ड NN फिल्ड्स NN पीएलसी NNP का PKO पूर्व JJ सभापति NN ५५ CD वर्षीय JJ रूडोल्फ NNP अग्न्यु NNP लाई PLAI यस DUM ब्रिटिस NNP औद्योगिक JJ समूह NN को PKO सल्लाहकार NN को PKO रूप NN मा POP मनोनयन NN गरिएको VBKO थियो VBX । YF एकताका RBO केन्ट NNP चुरोट NN को PKO फिल्टर NN बनाउन VBI प्रयोग NN भएको VBKO एक CD प्रकार NN को PKO अस्बेस्टोस NNP ']")

# load your file, using utf8
with open("myfile.txt","r",encoding="utf8") as f:
    data = f.read()
# convert the loaded string literal into a python list    
dataAsList = ast.literal_eval(data)

print(dataAsList)
print(type(dataAsList))

import itertools
d1 = dataAsList[0].split() 

# use 2 partial lists, using every 2nd word, once staring at 0, once at 1
# you can change   fillvalue=None   to some other value or remove it - None is the default.
output = list(itertools.zip_longest(d1[::2],d1[1::2], fillvalue = None)) 

print(p)

输出:

['भिन्केन NNP डच NNP प्रकाशन NN समूह NN एल्सेभियर NNP एन.भी. FB को PKO अध्यक्ष NN हुनुहुन्छ VBF । YF कन्सोलिडेटिड NNP गोल्ड NN फिल्ड्स NN पीएलसी NNP का PKO पूर्व JJ सभापति NN ५५ CD वर्षीय JJ रूडोल्फ NNP अग्न्यु NNP लाई PLAI यस DUM ब्रिटिस NNP औद्योगिक JJ समूह NN को PKO सल्लाहकार NN को PKO रूप NN मा POP मनोनयन NN गरिएको VBKO थियो VBX । YF एकताका RBO केन्ट NNP चुरोट NN को PKO फिल्टर NN बनाउन VBI प्रयोग NN भएको VBKO एक CD प्रकार NN को PKO अस्बेस्टोस NNP ']

<class 'list'>

[('भिन्केन', 'NNP'), ('डच', 'NNP'), ('प्रकाशन', 'NN'), ('समूह', 'NN'), 
 ('एल्सेभियर', 'NNP'), ('एन.भी.', 'FB'), ('को', 'PKO'), ('अध्यक्ष', 'NN'), 
 ('हुनुहुन्छ', 'VBF'), ('।', 'YF'), ('कन्सोलिडेटिड', 'NNP'), ('गोल्ड', 'NN'), 
 ('फिल्ड्स', 'NN'), ('पीएलसी', 'NNP'), ('का', 'PKO'), ('पूर्व', 'JJ'), 
 ('सभापति', 'NN'), ('५५', 'CD'), ('वर्षीय', 'JJ'), ('रूडोल्फ', 'NNP'), 
 ('अग्न्यु', 'NNP'), ('लाई', 'PLAI'), ('यस', 'DUM'), ('ब्रिटिस', 'NNP'), 
 ('औद्योगिक', 'JJ'), ('समूह', 'NN'), ('को', 'PKO'), ('सल्लाहकार', 'NN'), 
 ('को', 'PKO'), ('रूप', 'NN'), ('मा', 'POP'), ('मनोनयन', 'NN'), 
 ('गरिएको', 'VBKO'), ('थियो', 'VBX'), ('।', 'YF'), ('एकताका', 'RBO'), 
 ('केन्ट', 'NNP'), ('चुरोट', 'NN'), ('को', 'PKO'), ('फिल्टर', 'NN'), 
 ('बनाउन', 'VBI'), ('प्रयोग', 'NN'), ('भएको', 'VBKO'), ('एक', 'CD'), 
 ('प्रकार', 'NN'), ('को', 'PKO'), ('अस्बेस्टोस', 'NNP')] 

答案 1 :(得分:0)

splittedData = data[0].split(' ')
counter = len(splittedData)
if counter%2 == 0:
  pass
else:
  counter += 1
output_list= []
for x in range(counter/2):
  output_list.append((splittedData[x], splittedData[x+1]))
相关问题