2015-10-23 4 views
0

Я новичок в Python. У меня есть простой словарь под названием G8_Leaders.txt - следующим образом: {Камерон: Великобритания, Меркель: Германия, Обама: США, Путин: Россия} , и я пытаюсь перебирать пары - отображать содержимое в столбце, используя базовый "для" петли так:Нужна помощь в итерации через словарь - Python

f0 = "G8_Leaders.txt" 
f1 = open(f0) 
    for i in f1: 
     print(i, end=" ") 
    else: 
     print("Finished with Document: ", f0) 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~

Я хотел бы результаты в колонке, такие как:

Меркель Германия

Камерон Великобритании

Обама США

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

Каков правильный способ сделать это?

+1

В Python, делая 'для АБВ в 'будет перебирать файл по одной * строке * за раз. Если вы хотите получить реальный словарь python, вам нужно будет использовать что-то вроде модуля 'json' для загрузки содержимого файла в полезный объект python. – turbulencetoo

+0

У вас действительно есть две разные проблемы: 1.) Как разобрать текстовый файл в словаре python? 2.) Как выполнить итерацию через словарь python, печатая по одной паре за раз? – turbulencetoo

+0

Что вы подразумеваете под «У меня есть простой словарь под названием G8_Leaders.txt» ..? текстовый файл не является словарем. это текстовый файл. вы имеете в виду, что текст внутри него находится в этом формате? –

ответ

1

Во-первых, вы должны исправить представление словаря в файле, чтобы быть как:

d = {'Cameron':'UK', 'Merkel':'Germany', 'Obama':'USA', 'Putin':'Russia'} Это может быть сделано программно путем вызова str() на каждого ключа и значения d. Предполагая, что это фиксировано, одно решение будет:

# Create a file for test bench: 
d = {'Cameron':'UK', 'Merkel':'Germany', 'Obama':'USA', 'Putin':'Russia'} 
with open("G8_Leaders.txt", "w") as f: 
    f.write(str(d) +'\n') 

#Read and print from the file: 
with open("G8_Leaders.txt", "r") as f: 
    data = f.readlines() 
for line in data: 
    d = eval(line) 
    for y, z in d.items(): 
     print(y, z) 

Выход:

Cameron UK 
Merkel Germany 
Putin Russia 
Obama USA 
+0

спасибо @flamenco. – Cain

+0

@Cain: Поскольку вы новичок здесь, в качестве напоминания, не забудьте принять и перенести ответ, который вы решаете. – flamenco

+0

Я забыл упомянуть: он побежал просто отлично в py 2.x. Я в основном использую python 3.5, и ему не понравилось отсутствие парсеров в окончательном заявлении на печать, и, по-видимому, атрибут «iteritems» был заменен на «items» in py 3.x. Таким образом, он работает теперь, как ожидалось, в py 3.x. Интересно, что в py 2.x результаты помещаются в столбец кортежей, тогда как py 3.x отображает их точно так, как я хотел - в чистом столбце без прерывания скобок, parens и т. Д. Спасибо за вашу помощь! PS. Я действительно поддержал ваш ответ. – Cain

-1
import json 
print("\n".join(x+" "+ y for x,y in json.load(open("fname.txt" ,"rb")).iteritems())) 

просто загрузите его в формате JSON (по крайней мере, я думаю его не совсем понятно, если вы правильно отформатированный JSON в текстовом файле) ... (предупреждение, хотя словари неупорядоченный поэтому если вам нужен определенный порядок вам необходимо будет дать дополнительные разъяснения)

+0

крик забыл называть iteritems на результат ... –

0

Хорошо, здесь происходит пара вещей. f1 - это файловый объект, который не является тем, что вы ожидаете. Если вы хотите получить доступ к нему в виде строки, вы могли бы сделать

`f1_string = f1.read()` 

который считывает файл в переменную f1_string в виде строки. Вы можете сделать:

for line in f1.readlines(): 
    # operate on one line at a time in this block 

если вы предпочитаете читать построчно, который будет работать в вашем случае, если каждый элемент в отдельной строке в текстовом файле. Поскольку мы не знаем, что именно выглядит в вашем текстовом файле, трудно дать более конкретную помощь. Сообщается о модуле json, который может быть найден here, но я не совсем уверен, что это то, что вы хотите.

0

Если предположить, что ваш текстовый файл так же, как вы описали, то попробуйте следующее:

with open(f0, 'r') as f: 
     for line in f: 
      items = line.split(',') 
      for item in items: 
       leader = item.split(':')[0].replace('{','') 
       country = item.split(':')[1].replace('}','') 
       print(leader,country) 

Это должно работать независимо от того, имеет ли ваши данные разрывы строк в нем.

+0

Ваш подход тоже работает. Спасибо за помощь. – Cain

0

Попробуйте перебрать словарь:

leaders = {'Cameron':'UK', 'Merkel':'Germany', 'Obama':'USA', 'Putin':'Russia'} 
for leader in leaders:  
    print(leader, leaders[leader]) 
+0

Btw результаты печатаются в одной строке из-за конца = "" в вашем коде! Просто удалите его, и вы будете в порядке :) – Blind0ne

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