2015-03-12 2 views
0

У меня есть следующая структура Python.Как преобразовать эту структуру данных в python

{'2015-03-03': 
    [{'traffic': 80.0, 'Server': 'Server1'}, 
    {'traffic': 20.0, 'Server': 'Server2'}], 
'2015-03-04': 
    [{'traffic': 100.0, 'Server': 'Server1'}]} 

Мне нужно преобразовать это в словарь, как

{"Series": 
    [{'traffic': [80.0, 20.0], 'Server': 'Server1'}, 
    {'traffic’: [100.0, 0], ’Server': 'Server2'}], 
"dates" : 
    [“2015-03-03”, 2015-03-04”]} 

Я попытался следующее. (результат имел первый словарь)

final_data = {} 
final_data['series'] = [] 
final_data['dates'] = sorted(result.keys()) 
for key in final_data['dates']: 
    final_data['series'].append(result[key]) 

Но это не дает преобразованной структуры данных. Любая помощь?

+0

У вас есть код, в котором вы пытались выполнить преобразование? –

+4

У вас есть некоторые недостатки и расхождения между вашим источником и вашей целью. –

ответ

1

насчет:

di = { 
    '2015-03-03': [{'traffic': 80.0, 'Server': 'Server1'}, 
        {'traffic': 20.0, 'Server': 'Server2'}], 
    '2015-03-04': [{'traffic': 100.0, 'Server': 'Server1'}] 
} 


dates = sorted(di.keys())          # Get all dates 
servers = set(e['Server'] for v in di.values() for e in v)  # Get all servers 

# Refactor the dictionary 
df = {} 
for (k,v) in di.iteritems(): 
    df[k] = {} 
    for elem in v: 
     df[k][elem['Server']] = elem['traffic'] 

# Compute series (if the [date][server] key-chain doesn't exist in df, use 0) 
series = [] 
for server in servers: 
    traffic = [] 
    for date in dates: 
     try: traffic.append(df[date][server]) 
     except: traffic.append(0) 
    series.append({'traffic':traffic, 'Server':server}) 

# Create output dict 
do = { 
    'Series': series, 
    'dates': dates, 
} 

print do 

Выход:

{ 
    'Series': [ 
     {'traffic': [80.0, 100.0], 'Server': 'Server1'}, 
     {'traffic': [20.0, 0], 'Server': 'Server2'} 
    ], 
    'dates': ['2015-03-03', '2015-03-04'] 
} 

Обратите внимание, что это отличается от вашего ожидаемого выхода. В вашем ожидаемом выходе у вас было do['Series'][0]['traffic'] = [80.0, 20.0], но у меня есть [80.0, 100.0] - так как это записи трафика, соответствующие «Server1».

Если вы действительно хотите [80.0, 20.0], мне нужно знать, какую логику вы используете для установления этого соединения.

+0

Это именно то, что я хочу. благодаря – user2890683

Смежные вопросы