Вывод словаря Python со значениями в массиве в файл CSV. - PullRequest
1 голос
/ 29 июля 2011

Первый вопрос здесь, пожалуйста, простите за различные ошибки, которые я обязательно сделаю.

Я работал над этим некоторое время, и я признаюсь, что был поставлен в тупик - словари в общем смысле немного болят головой, так как мой опыт в большей степени связан со статистикой, где данные имеют довольно явную структуру. Я работаю в Python 2.7, и у меня есть следующая проблема: В конце некоторого анализа, используя пакет NetworkX, у меня есть два словаря, которые меня интересуют, которые я назову Able и Baker.

Каждый из них, по сути, является словарем имени сетевого узла и значения. Так что-то вроде:

Джо: 7 Кейт: 9 Майк: 3-и- Джо: 12 Кейт: 4 Майк: 2

Но этот вывод выйдет из Python, и хотя я мог бы довольно легко вывести все это в виде двух отдельных файлов (и было до сих пор), было бы очень здорово, чтобы он вышел в виде одного CSV-файла , отформатированный так:

Джо, 7, 12
Катя, 9, 4
Mike, 3, 2

Сейчас я запускаю следующее, чтобы объединить два словаря в один словарь:

output = dict((k, [Able[k], Baker.get(k)]) for k in Able)
output.update((k, [None, Baker[k]]) for k in Baker if k not in Able)

Это приближает меня к тому, что я хочу, а именно к словарю с Джо: [7, 12]. Но я, честно говоря, озадачен тем, как заставить писателя CSV сотрудничать и выводить [7,12] как отдельные объекты (т.е. 7,12), а не как части массива. Ближайшее, что я получил, это:

net_out = open('output.csv', 'w')
writer = csv.writer(net_out, dialect='excel')
for node, value in output.items():
    writer.writerow([node,value])
net_out.close()

Который выпускает ряды Джо, [7,12]. Кто-нибудь может указать мне правильное направление?

Ответы [ 2 ]

2 голосов
/ 29 июля 2011

Заменить writer.writerow([node,value]) с writer.writerow([node]+value)

1 голос
/ 29 июля 2011

Вы передаете список, содержащий имя и список с двумя числами, writer.writerow. Чтобы получить то, что вы хотите, сведите список в список имен и номеров. Простой подход:

for node, value in output.items():
    writer.writerow([node] + value)
...