Ich habe Python-Code geschrieben, um Daten vom SQL Server abzurufen, und versuche derzeit, die Daten zusammenzuführen. Ich habe versucht, die Daten in einen Datenrahmen zu ziehen und dann damit zu arbeiten, konnte dies jedoch nicht.

Das aktuelle Formular, in dem ich die Daten eingerichtet habe, lautet wie folgt:

[ { a : { 1 : ( x,y,z,...) }}, 
{ a : { 2 : ( x,y,z,...) }},
{ a : { 3 : ( x,y,z,...) }} ]

Hier möchte ich hin

[ { a : { 1 : ( x,y,z,...) , 2 : (x,y,...) , 3 : (x,y,z,...) } ]
0
sai 18 Apr. 2018 im 23:20

3 Antworten

Beste Antwort

Verwenden Sie eine verschachtelte Wörterbuchstruktur über collections.defaultdict.

Beachten Sie, dass in dieser Implementierung doppelte innere Schlüssel nicht zulässig sind. Sie können beispielsweise nicht zwei Wörterbücher mit dem äußeren Schlüssel 'a' und dem inneren Schlüssel 1 haben. In diesem Fall hat der letzte Vorrang.

from collections import defaultdict

lst = [ { 'a' : { 1 : ( 3, 4, 5 ) }}, 
        { 'a' : { 2 : ( 6, 7, 8 ) }},
        { 'a' : { 3 : ( 1, 2, 3 ) }},
        { 'c' : { 4 : ( 5, 9, 8 ) }}, 
        { 'b' : { 1 : ( 6, 6, 8 ) }},
        { 'c' : { 3 : ( 2, 5, 7 ) }}]

d = defaultdict(dict)

for item in lst:
    key = next(iter(item))
    d[key].update(item[key])

# defaultdict(dict,
#             {'a': {1: (3, 4, 5), 2: (6, 7, 8), 3: (1, 2, 3)},
#              'b': {1: (6, 6, 8)},
#              'c': {3: (2, 5, 7), 4: (5, 9, 8)}})
2
jpp 18 Apr. 2018 im 20:32

Sie können die Funktion reduce und dict.update , um die Daten zu transformieren. Angenommen, 'a' ist Ihr einziger Schlüssel, können Sie Folgendes tun:

a = [
  {'a': {1: (1, 2, 3)}},
  {'a': {2: (4, 5, 6)}},
  {'a': {3: (7, 8, 9)}}
]

def update(d, c):
  d['a'].update(c['a'])
  return d
print reduce(update, a, {'a':{}}) #Prints {'a': {1: (1, 2, 3), 2: (4, 5, 6), 3: (7, 8, 9)}}
0
Sunny Patel 18 Apr. 2018 im 20:33

Wie ist das?

data = [{'a': {1: 4}, 'b': {7: 8}},
        {'a': {2: 5}, 'b': {9: 10}},
        {'a': {3: 6}}]
all_keys = set().union(*data)
result = {}
for key in all_keys:
    result[key] = {}
    for d in data:
        if key in d:
            result[key].update(d[key])

print(result)  # {'b': {7: 8, 9: 10}, 'a': {1: 4, 2: 5, 3: 6}}
1
Alex Hall 18 Apr. 2018 im 20:33