2017-09-11 2 views
1

Dies ist Beispiel für mylist für die Eingabe:Map Umwandlung in eine Liste

mylist = [['RWILY MORSHED', 7670315350025, 'August/2014, Iulie/2014, Septembrie/2014', 1620, 1620], ['AL BADRI MOHAMMED YAHYA TAWFEEQ', 7700119350028, 'Martie/2015, Aprilie/2015, Februarie/2015', 1620, 1620]] 

und meine gewünschte Ausgabe wird sein:

mylist = [['RWILY MORSHED', 7670315350025, 'August 2014, July 2014, September 2014', 1620, 1620], ['AL BADRI MOHAMMED YAHYA TAWFEEQ', 7700119350028, 'March 2015, April 2015, February 2015', 1620, 1620]] 

Im Grunde habe ich die Monatsnamen aus dem Rumänischen ins Englische zu konvertierende und bekomme die oben gewünschte Ausgabe (Ich brauche den ganzen Monat in der gleichen Index 2 Position wie in der Ausgabe)!

Und dass ich am Ende mit auf den Punkt:

conversionsEnNames = {"Ianuarie": "January", "Februarie": "February","Martie": "March", "Aprilie": "April","Mai": "May","Iunie": "June", "Iulie": "July","August": "August", "Septembrie": "September","Octombrie": "October", "Noiembrie": "November","Decembrie": "December"} 

for i in mylist: 
    i[2]=i[2].replace("/", " ") 
    for j in i: 
     if j in conversionsEnNames: 
      j = conversionsEnNames[j] 
      i[2]=j 

print(mylist) 

Aber das wird drucken:

[['RWILY MORSHED', 7670315350025, 'August 2014, Iulie 2014, Septembrie 2014', 1620, 1620], ['AL BADRI MOHAMMED YAHYA TAWFEEQ', 7700119350028, 'Martie 2015, Aprilie 2015, Februarie 2015', 1620, 1620]] 

Und sicher die Karte nicht, da 'Iulie 2014' funktioniert = ‚Iulie! 'so dass es es in Juli umwandeln kann, was ich zu ändern, um meine gewünschte Leistung zu erreichen? Vielen Dank für Ihre Zeit!

+0

versuchen ersetzen 'j = conversionsEnNames [j] verwenden; i [2] = j' mit 'i [2] .replace (j, conversionsEnNames [j])' – georgexsh

Antwort

2

Das sollte es tun.

for item in mylist: 
    item[2] = item[2].replace('/', ' ') 
    for roman, english in conversionsEnNames.items(): 
     item[2] = item[2].replace(roman, english) 
+0

Dies scheint der einfachste und schnellste Ansatz, danke Sir! –

0

Ändern Sie einfach die letzten drei Zeilen in der Schleife.

>>> for i in mylist: 
...  i[2]=i[2].replace("/", " ") 
...  for j in conversionsEnNames: 
...   i[2] = i[2].replace(j, conversionsEnNames[j]) 
... 
>>> print(mylist) 
[['RWILY MORSHED', 7670315350025, 'August 2014, July 2014, September 2014', 1620, 1620], ['AL BADRI MOHAMMED YAHYA TAWFEEQ', 7700119350028, 'March 2015, April 2015, February 2015', 1620, 1620]] 
+0

Danke, ich werde es auch versuchen! –

0

Seien Sie vorsichtig: i ist nicht die "Monate" string, aber die ganze Liste.

Daher gehört "Iulie" nicht zu der Liste (ist aber ein Teilstring eines Elements in der Liste).

Darüber hinaus können Sie .replace(x, conversionsEnNames[x]) für jeden x in conversionsEnNames verwenden: Dies ist nicht "sicher" ist (warum?), Aber es funktioniert in diesem Fall.

1

Sie könnten auch reguläre Ausdrücke verwenden (nur weil Regexes cool sind, nicht weil die Lösung besser ist als die anderen). Hier ist ein Ausschnitt, das sich um den Ersatz in einer einzigen Saite nimmt:

import re 
def rep(m): 
    if m.group(1) in conversionEnNames: 
     return conversionEnNames[m.group(1)] + " " + m.group(2) 
    else: 
     return m.group(0) 
test = "blah blah Iulie/2014 blah Februarie/2015 blih blah bluh" 
result = re.sub(r"([A-Za-z]+)/(\d\d\d\d)", rep, test) 

Es ergeben sollte

"blah blah July 2014 blah February 2015 blih blah bluh" 

Sie können sich verbessern, wie gebraucht.

+0

Ich mag auch Regex, muss sie mehr studieren, du magst das auch! Vielen Dank! –

1

können Sie eine einfache dict Lookup

def convert_date(date_string, conversionsEnNames): 

    parts = [part.split('/') for part in date_string.split(', ')] 
    return ', '. join(conversionsEnNames[part[0]] + ' ' + part[1] for part in parts) 

for line in mylist: 
    line[2] = convert_date(line[2], conversionsEnNames) 
mylist 
[['RWILY MORSHED', 7670315350025, 'August 2014, July 2014, September 2014', 1620, 1620], 
['AL BADRI MOHAMMED YAHYA TAWFEEQ', 7700119350028, 'March 2015, April 2015, February 2015', 1620, 1620]] 
+0

Vielen Dank! Ich werde das testen! –

Verwandte Themen