Frage

Ich habe Strings, die wie dieses aussehen:

"(8, 12.25), (13, 15), (16.75, 18.5)"

, und ich möchte jeden von ihnen in eine Python-Datenstruktur konvertieren. Vorzugsweise wird eine Liste (oder Tupel) von Tupeln ein Paar Gleitkommawerte enthalten.

könnte ich mit eval("(8, 12.25), (13, 15), (16.75, 18.5)"), die mir ein Tupel von Tupel gibt, aber ich glaube nicht naiv externe Informationen Auswertung eine weise Entscheidung wäre.

So fragte ich mich, was eine elegante pythonic Lösung aussehen könnte.

War es hilfreich?

Lösung

>>> import ast
>>> print ast.literal_eval("(8, 12.25), (13, 15), (16.75, 18.5)")
((8, 12.25), (13, 15), (16.75, 18.5))

Andere Tipps

def parse(s):
    tuples = s.split('), ')
    out = []
    for x in tuples:
        a,b = x.strip('()').split(', ')
        out.append((float(a),float(b)))
    return out

Dies sollte den Job.

Ich habe verwendet safe_eval für Jobs wie dies in der Vergangenheit.

Wenn Sie mit einer CSV-Datei arbeiten, und Sie wollen mehr als die „naive“ Lösung, die keine Fehler handhaben ist, sind Sie wahrscheinlich am besten dran mit dem Pythons CSV-Modul .

Download PyParsing .

Ich habe vor mit ihm gearbeitet. Sie können einige ziemlich robust Parsingverhalten aus ihm heraus, und ich denke, es builtins bietet, die Ihre gesamte Parsing Bedürfnisse mit dieser Art der Sache behandelt. Look up commaSeparatedList und nestedExpr.

Was ist los mit ihm systematisch zu tun? aufgeteilt auf „)“, dann gehen Sie durch die Liste, entfernen Sie alle „(“.

>>> s="(8, 12.25), (13, 15), (16.75, 18.5)"
>>> [ i.replace("(","") for i in s.split(")") ]
['8, 12.25', ', 13, 15', ', 16.75, 18.5', '']
>>> b = [ i.replace("(","") for i in s.split(")") ]
>>> for i in b:
...  print i.strip(", ").replace(" ","").split(",")
...
['8', '12.25']
['13', '15']
['16.75', '18.5']
['']

Jetzt können Sie jedes Element in der Datenstruktur bringen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top