2015-08-20 3 views
0

У меня есть данные следующего вида:CSV-файл из списка с несколькими словарями в Python?

{'count': '274', 'file_type': 'json', 'limit': '100000', observation_end': '9999-12-31', 'observation_start': '1776-07-04', 'observations': "[{'date': '1947-01-01', 'realtime_start': '2015-08-20', 'realtime_end': '2015-08-20', 'value': '3.962'}, {'date': '1947-04-01', 'realtime_start': '2015-08-20', 'realtime_end': '2015-08-20', 'value': '4.052'}, {'date': '1947-07-01', 'realtime_start': '2015-08-20', 'realtime_end': '2015-08-20', 'value': '4.172'}, {'date': '1947-10-01', 'realtime_start': '2015-08-20', 'realtime_end': '2015-08-20', 'value': '4.270'}, {'date': '1948-01-01', 'realtime_start': '2015-08-20', 'realtime_end': '2015-08-20', 'value': '4.372'}, {'date': '1948-04-01', 'realtime_start': '2015-08-20', 'realtime_end': '2015-08-20', 'value': '4.432'}, {'date': '1948-07-01', 'realtime_start': '2015-08-20', 'realtime_end': '2015-08-20', 'value': '4.521'}] 

Я хочу создать CSV или Excel файл из него так, что разные значения появляются на разных строках. Например, данные 1948-07-01 значение 4521. Возможно ли и как? Я попробовал следующее:

writer = csv.writer(open('dict.csv', 'wb')) 
for key, value in mydict.items(): 
    writer.writerow([key, value]) 

Но получить последнюю строку, содержащую все словари списка в одной строке.

+0

, пожалуйста, убедитесь, что ваш синтаксис слова верен. –

ответ

0

Вы должны сначала написать заголовки с помощью клавиш, а затем записать свои значения.

Учитывая тот факт, что все ваши данные ключи SAMES, следующие будут работать:

writer = csv.writer(open('dict.csv', 'wb')) 
# retrieve the first dict to write the csv header: 
header = data[0].keys() 
writer.writerow(header) 
# iterate over data: 
for data in datas: 
    writer.writerow(data.values()) 

Не забывайте использовать collections.OrderedDict, чтобы убедиться, что .keys и .values методы возвращают элементы в том же порядке.

1
import ast # since your observations seems to be a string 
a=your_dictionary 
observations=ast.literal_eval(a["observations"]) # this will convert this string to list 
headers=observations[0].keys() 
writer = csv.writer(open('dict.csv', 'wb')) 
writer.writerow(headers) # to make sure your headings are date,realtime_start etc 
for data in observations: 
    row=[data[header] for header in headers] #will create the row in same order as headers 
    writer.writerow(row) 
+0

Спасибо тонну @ Rajesh. Великая помощь действительно. –

+0

@Rajesh_Sharma - отметьте его как ответ, если вы чувствуете, что я правильно ответил на ваш вопрос –

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