2016-05-31 19 views
-2

Wie kann ich die folgende ListeEntpacken einer Liste von Tupeln

[('1', 'GENERAL', '1'), ('1.1', 'RELATED DOCUMENTS', '1'), ('1.2', 'SUMMARY', '1'), ('1.3', 'DEFINITIONS', '1'), ('1.4', 'INFORMATIONAL SUBMITTALS', '2'), ('1.5', 'GENERAL COORDINATION PROCEDURES', '2'), ('1.6', 'COORDINATION DRAWINGS', '3'), ('1.7', 'REQUESTS FOR INFORMATION (RFIs)', '4'), ('1.8', 'PROJECT MEETINGS', '6')] 
[[('2', 'PRODUCTS – NOT APPLICABLE', '10')]] 

Von der Lösung auf anderen Beitrag habe ich versucht zu entpacken.

Part, Title, Page = zip(*text_good[0]) 

bekam aber den Fehler

too many values to unpack (expected 3) 

Und ich habe auch versucht,

Part1[a].append(Part for Part, Title, Page in text_good[0]) 
Part2[a].append(Part for Part, Title, Page in text_good[1]) 
Part3[a].append(Part for Part, Title, Page in text_good[2]) 

Aber dies schien eine Stelle in Erinnerung zurück, und ich konnte das Array nicht öffnen, weil ich einen Fehler empfangen dass es nicht auswählbar ist.

Dank

Update: Zuordnung von text_good

for i in range(0, len(text_between_parts)): 
    text_good[i].append(re.findall(r'\s*(\b\d+(?:[.]\d+)?)\W+\s*(.*?)\s*(\b\d+\b)', text_between_parts[i])) 

Update 2: Wenn ich text_good tun [0] Ich bekomme

[[('1', 'GENERAL', '1'), ('1.1', 'RELATED DOCUMENTS', '1'), ('1.2', 'SUMMARY', '1'), ('1.3', 'DEFINITIONS', '1'), ('1.4', 'INFORMATIONAL SUBMITTALS', '2'), ('1.5', 'GENERAL COORDINATION PROCEDURES', '2'), ('1.6', 'COORDINATION DRAWINGS', '3'), ('1.7', 'REQUESTS FOR INFORMATION (RFIs)', '4'), ('1.8', 'PROJECT MEETINGS', '6')]] 

und wenn ich text_good [0] [ 0] ich bekomme

[('1', 'GENERAL', '1'), ('1.1', 'RELATED DOCUMENTS', '1'), ('1.2', 'SUMMARY', '1'), ('1.3', 'DEFINITIONS', '1'), ('1.4', 'INFORMATIONAL SUBMITTALS', '2'), ('1.5', 'GENERAL COORDINATION PROCEDURES', '2'), ('1.6', 'COORDINATION DRAWINGS', '3'), ('1.7', 'REQUESTS FOR INFORMATION (RFIs)', '4'), ('1.8', 'PROJECT MEETINGS', '6')] 

Beachten Sie die zusätzliche Klammer, wenn ich text_good [0] mache.

+3

Das ist keine Liste. Es könnte zwei Listen oder eine Zeichenfolge oder etwas sein, oder Sie hätten den Text gerade vermasseln können, als Sie ihn gepostet haben. – user2357112

+1

Was wollen Sie 'Teilwerk',' Title' und 'Page' nach dieser Operation sein? – user2357112

+0

Ich bin mir ziemlich sicher, dass es eine Liste mit einem Tupel ist an jedem Index. Als ich Liste habe [0] ich [[('1', 'Allgemein', '1'), ('1.1', 'Dokumente', '1'), ("1.2 ',' PROJEKTBESCHREIBUNG ',' 1 '), (' 1.3 ',' EIGENTÜMER ',' 1 '), (' 1.4 ',' ARCHITEKT/INGENIEUR ',' 2 '), (' 1.5 ',' KAUF VERTRÄGE ',' 2 '), (' 1.6 ',' BESTEUERUNGSGEGENSTAND ',' 2 '), (' 1.7 ',' AUFTRAGGEBER, '3'), ('1.8', 'VERTRAGSNUTZER VON GEBÄUDEN ',' 3 '), (' 1.9 ',' BESITZER ',' 3 '), (' 1.10 ',' ARBEITSBESCHRÄNKUNGEN ',' 4 ')]]. Ich möchte, dass das Endergebnis 3 separate Listen ist, die jeweils einen Wert für jedes Tupel haben. – Jstuff

Antwort

2

Ok, ich denke, wir müssen hier zunächst ein wenig Klärung tun. Ich bin ein wenig verwirrt darüber, was genau die Liste ist so werde ich die folgende Annahme machen (wenn eine dieser Annahmen falsch sind, bitte lassen Sie mich wissen, damit ich sie beheben):

text_good = [[('1', 'GENERAL', '1'), ('1.1', 'RELATED DOCUMENTS', '1'), ('1.2', 'SUMMARY', '1'), ('1.3', 'DEFINITIONS', '1'), ('1.4', 'INFORMATIONAL SUBMITTALS', '2'), ('1.5', 'GENERAL COORDINATION PROCEDURES', '2'), ('1.6', 'COORDINATION DRAWINGS', '3'), ('1.7', 'REQUESTS FOR INFORMATION (RFIs)', '4'), ('1.8', 'PROJECT MEETINGS', '6')], [('2', 'PRODUCTS - NOT APPLICABLE', '10')]] 

Wohin jetzt, wenn ich tun text_good[0] ich:

[('1', 'GENERAL', '1'), 
('1.1', 'RELATED DOCUMENTS', '1'), 
('1.2', 'SUMMARY', '1'), 
('1.3', 'DEFINITIONS', '1'), 
('1.4', 'INFORMATIONAL SUBMITTALS', '2'), 
('1.5', 'GENERAL COORDINATION PROCEDURES', '2'), 
('1.6', 'COORDINATION DRAWINGS', '3'), 
('1.7', 'REQUESTS FOR INFORMATION (RFIs)', '4'), 
('1.8', 'PROJECT MEETINGS', '6')] 

und text_good[1] wäre:

[('2', 'PRODUCTS - NOT APPLICABLE', '10')] 

und mir scheint, wie Sie eine Liste von Tupeln, wo ('1', 'GENERAL', '1') würde in dieser Reihenfolge Part, Title, Page entsprechen.

Dann, wenn dies der Fall, dass Sie etwas tun müssen, können:

Parts, Title, Page = zip(*[t for l in text_good for t in l]) 

Wo in diesem Fall erhalten Sie:

print Parts # ('1', '1.1', '1.2', '1.3', '1.4', '1.5', '1.6', '1.7', '1.8', '2') 
print Title # ('GENERAL', 
      # 'RELATED DOCUMENTS', 
      # 'SUMMARY', 
      # 'DEFINITIONS', 
      # 'INFORMATIONAL SUBMITTALS', 
      # 'GENERAL COORDINATION PROCEDURES', 
      # 'COORDINATION DRAWINGS', 
      # 'REQUESTS FOR INFORMATION (RFIs)', 
      # 'PROJECT MEETINGS', 
      # 'PRODUCTS - NOT APPLICABLE') 

print Page # ('1', '1', '1', '1', '2', '2', '3', '4', '6', '10') 

Finale Edit: Da @JStuff eine list of lists of lists of tuples hat, Wir benötigen technisch 3 For-Schleifen, um die gewünschten Definitionen zu extrahieren.

Parts, Title, Page = [t for l in text_good for ll in l for t in ll] # Yay for list comprehension? 
+0

Dies ist genau das, was ich brauche, aber es funktioniert nicht ganz, weil meine Liste text_good mehrere Listen enthält, was ich mit [[('2', 'PRODUKTE - NICHT ANWENDBAR', '10')] vermitteln wollte]] unter der Liste, die Sie in Ihrer Lösung verwendet haben. Wenn ich Parts, Title, Page = zip (* text_good) mache, erhalte ich den Fehler ValueError: nicht genug Werte zum Entpacken (erwartet 3, 1 bekommen). Hinweis: text_good enthält derzeit 3 ​​Listen. Wenn ich Teil, Titel, Seite = zip (* text_good [0]) versuche, bekomme ich den Fehler ValueError: zu viele Werte zum Entpacken (erwartet 3). Hilft das? Ich kann alles weiter klären. Ich bin in Python 3 – Jstuff

+0

@Jstuff können Sie copy/paste die Zuordnung von 'text_good' – ZWiki

+0

Diese verwirrend sein kann, aber für i in range (0, len (text_between_parts)): text_good [i] .append (re. findall (r '\ s * (\ b \ d + (?: [.] \ d +)?) \ W + \ s * (. *?) \ s * (\ b \ d + \ b)', text_zwischen_teile [i])) – Jstuff

Verwandte Themen