2017-06-26 3 views
0

aufzuspalten:dict Verständnis mit einer Liste in python3 Moment habe ich eine dict in Form

op = {"var1":"600103","var2[0]":{"a":"1","b":"2"}} 

ich zur Zeit Schleife manuell bin mit:

data = {"var1":"600103", "var2":[{"a":"1","b":"2"}]} 

ich die Ausgabe sein möchte Schleife durch. Ich würde gerne wissen, ob es eine pythischere Art gibt, dies zu tun.

+1

Können Sie die Gründe für die Mutation dieses Schlüssels erklären? Im Allgemeinen, wie werden Sie diese Mutation anwenden? Außerdem, wo ist die Liste? Was spalten Sie? –

+0

Eine Person, die auf dem Server arbeitet, hat die gesamte API, die wir gerade benutzen, vermasselt. Ich versuche, Dinge zu reparieren, während wir die db reparieren. Das Feld var2 wird mehr Einträge haben. Daten könnten also auch Daten = {"var1": "600103", "var2": [{"a": "1", "b": "2"}, {a ":" 22 "," b ":" 555}]} in diesem Fall brauchen wir "var [1]" in der Schlüsselliste. – galeej

+0

Nichts mehr pythonisches als eine verschachtelte Schleife Ich habe Angst. –

Antwort

1

Wenn dies nicht das ist, was Sie bereits tun, können Sie die Notwendigkeit einer verschachtelten Schleife beseitigen, indem Sie ein Diction-Verständnis für die Werte verwenden, die Listen sind.

data = {"var1":"600103", "var2":[{"a":"1","b":"2"}, {"a":"22","b":"555"}]} 

op = {} 
for k in data: 
    if not isinstance(data[k], list): 
     op[k] = data[k] 
    else: 
     op.update({k + '[{}]'.format(i) : data[k][i] for i in range(len(data[k])) }) 

Und die Ausgabe wie folgt aussehen:

{'var1': '600103', 'var2[1]': {'a': '22', 'b': '555'}, 'var2[0]': {'a': '1', 'b': '2'}} 
+0

danke! Funktioniert wie ein Charme. – galeej

+0

Yup, keine Sorgen. ^^ –

1

Ich weiß nicht, ob es sehr pythonic ist oder nicht, aber ich weiß sicher, dass es schwierig ist, zu lesen: Leider S, nur spielen ...;)

data = {"var1":"600103", "var2":[{"a":"1","b":"2"},{"a":"3","b":"4"},{"a":"5","b":"6"},{"a":"7","b":"8"}], "var3":"600103"} 
reduce(
    lambda a, b: dict(a.items() + b.items()), 
    [ 
     dict(map(lambda (idx, i): ('{0}[{1}]'.format(key, idx), i), enumerate(value))) if type(value) is list else {key: value} 
     for key, value 
     in data.items() 
    ] 
) 

Ausgang:

{'var1': '600103', 
'var2[0]': {'a': '1', 'b': '2'}, 
'var2[1]': {'a': '3', 'b': '4'}, 
'var2[2]': {'a': '5', 'b': '6'}, 
'var2[3]': {'a': '7', 'b': '8'}, 
'var3': '600103'} 
Verwandte Themen