2016-04-19 5 views
-2

Also im Grunde versuche ich einen Filter zu schreiben, wo ich Zahlen und Buchstaben von meinem Wörterbuch trennen kann und einen Abstand dazwischen haben. So zum Beispiel 12346 S12346 Q.Abstand zwischen Buchstaben und Zahlen

def check_if_works(): 
    dict_info = {} 
    dict_info['1234'] = "test" 
    dict_info['12456s'] = "test" 
    dict_info['12456q'] = "test" 
    dict_info['12456b'] = "test" 
    dict_info['123456'] = "test" 
    dict_info['asdftes'] = "test" 
    dict_info['asdftess'] = "test" 
    dict_info['asdftessd'] = "test" 
    arr = [] 
    for key,value in dict_info.iteritems(): 
     if key.isalpha() or key.isdigit(): 
      pass 
     #print key 
     else: 
      print key 

Antwort

0

Keine Notwendigkeit für eine Liste der Wörterbücher, möchten Sie die new_dict direkt füllen und zu entleeren.

Auch gibt es keine Notwendigkeit für try/except (was nicht funktioniert, weil str.isalpha() hat nie Ausnahmen werfen), sollten Sie nur Kontrollen kombinieren, um zu testen, dass es nur Buchstaben oder Zahlen (isalnum()) enthält, und dass es nicht enthält entweder nur Buchstaben (isalpha()) oder nur Zahlen (isdigit()).

Dann schreiben Sie auch nicht die Datei einmal pro Iterationsschritt über das ursprüngliche Wörterbuch, sondern nur einmal am Ende, um das gesamte Ergebniswörterbuch auszugeben.

new_dict = {} 

for key,value in dict_info.iteritems(): 
    check = key.isalnum() and not (key.isalpha() or key.isdigit()) 

    new_dict[insert_spaces(key)] = value 
    print (key, ":", value) 

with open('output.json', 'wb') as outfile: 
    json.dump(new_dict, outfile, indent=4) 

Die Funktion insert_spaces Sie benötigen einen Raum zwischen Ziffer + Brief oder Brief + Ziffer einfügen sieht wie folgt aus:

import re 
def insert_spaces(key): 
    return re.sub(r'(\D)(\d)', r"\1 \2", re.sub(r'(\d)(\D)', r"\1 \2", key)) 

Alternativ Ihnen die ganze Code mit einem Wörterbuch Verständnis ersetzen könnte (seit Python 2.7):

Oder schöner formatiert durch Extrahieren der Prüfung c ondition in eine Lambda-Funktion:

check_key = lambda key: key.isalnum() and not (key.isalpha() or key.isdigit()) 
with open('output.json', 'wb') as outfile: 
    json.dump({ insert_spaces(k): dict_info[k] for k in dict_info if check_key(k) }, 
       outfile, indent=4) 
+0

Hey, wie würde ich, damit ich meine Buchstaben und Zahlen geteilt haben Platz auf beiden. – Benji

+0

@Benji Eine Funktion hinzugefügt, die Sie dafür verwenden können. Beachten Sie, dass Sie das 're' Modul importieren müssen. –

+0

Süß. Ich habe eine letzte Frage. Also grundsätzlich, Sagen wir, ich habe Schlüssel wie CS 10, CS 70. Also was ich gerne tun würde, ist Pass, wenn die ersten paar Zeichen gleich sind. Wenn sie nicht identisch sind, fügen Sie sie der Liste hinzu. So wie zwei Wörter zu vergleichen. – Benji

Verwandte Themen