繁体   English   中英

需要帮助遍历字典-Python

[英]Need help iterating through a dictionary - Python

我是Python的初学者。 我有一个简单的字典,叫做G8_Leaders.txt-如下:{Cameron:UK,Merkel:Germany,Obama:USA,Putin:Russia},并且我试图遍历两对-在列中显示内容,使用基本的“ for”循环如下所示:

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

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

我想要列中的结果,例如:

默克尔德国

卡梅伦英国

奥巴马美国

依此类推...但是,结果只显示在一行中,因为它们显示在文本文件中。

正确的方法是什么?

首先,您必须将字典在文件中的表示形式固定为:

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

好的,这里发生了几件事。 f1是一个文件对象,不是您所期望的。 如果要以字符串形式访问它,则可以

`f1_string = f1.read()`

f1_string文件作为字符串读取到变量f1_string中。 您可以这样做:

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

如果您希望一次读取一行,那么在文本文件中每个元素都位于其自己的行的情况下,这将适用于您的情况。 由于我们不知道您的文本文件到底是什么样子,因此很难提供更具体的帮助。 人们所指的json模块可以在这里找到,但是我不完全确定那是您想要的。

假设您的文本文件与您所描述的一样,请尝试以下操作:

    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)

无论您的数据中是否包含换行符,此方法都应起作用。

尝试通过字典进行迭代:

leaders = {'Cameron':'UK', 'Merkel':'Germany', 'Obama':'USA', 'Putin':'Russia'}
for leader in leaders:    
    print(leader, leaders[leader])
import json
print("\n".join(x+"  "+ y for x,y in json.load(open("fname.txt" ,"rb")).iteritems()))

只需将其加载为json(至少我认为如果您在文本文件中正确格式化了json格式,它就不太清楚了 )...(尽管字典是无序的,所以如果您需要确定的顺序,则必须提供更多的说明)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM