На самом деле вы можете создать вывод с помощью одной строки Python (кроме данных, очевидно), используя генераторы списков(a):
data = {
"Uranus": ["2750", "3000", "2880"],
"Mercury": ["46", "70", "57"],
"Earth": ["147", "152", "150"],
"Venus": ["107", "109", "108"],
"Mars": ["205", "249", "228"],
"Saturn": ["1350", "1510", "1430"],
"Jupiter": ["741", "817", "779"],
"Neptune": ["4450", "4550", "4500"],
"Pluto": ["4440", "7380", "5910"],
}
print("\n".join([f'{planet},{",".join(data[planet])}' for planet in data]))
Разбивая это выражение на части:
f'something'
— это f-строка Python, в которой переменные и выражения могут быть интерпретированы внутри самой строки — например, f'_{7+4}_'
даст вам ''147,152,150'
'
;
{planet}
в этой f-строке означает именно это, переменную planet
(см. ниже, откуда это взялось);
{",".join(data[planet])}
— это выражение join
в этой f-строке, которое берет каждый элемент в списке data[planet]
и дает вам строку, разделенную запятыми. Например, выражение ','.join(data['Earth'])
даст вам '147,152,150'
;
[... for planet in data]
создаст список каждой из перечисленных выше вещей (планеты и их значения), по одной на планету в коллекции data
— вот откуда берется переменная planet
в приведенных выше нескольких пунктах;
наконец, "\n".join(...)
— это внешнее выражение join
, которое берет все выходные данные планеты (например, Earth,147,152,150
) из предыдущей точки и создает строку, в которой они разделены символами новой строки.
Затем мы просто печатаем эту строку, и вы видите, что она генерирует правильные данные:
Uranus,2750,3000,2880
Mercury,46,70,57
Earth,147,152,150
Venus,107,109,108
Mars,205,249,228
Saturn,1350,1510,1430
Jupiter,741,817,779
Neptune,4450,4550,4500
Pluto,4440,7380,5910
Чтобы получить это в выходной файл, а не просто распечатать его, достаточно просто:
with open('outfile.txt', 'w') as new_file:
print("\n".join([f'{planet},{",".join(data[planet])}' for planet in data]), file=new_file)
(a) Это нормально для небольших коллекций, подобных этой, но вы можете переосмыслить это, если вы храните данные на всех примерно сто миллиардов или около того планет в нашей галактике. Это будет одна большая строка :-)
12.05.2020