在Python3中定义字典

2024-03-29 02:39:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面的代码,想把一个字符串从一个文件变成一个字典(要读入和操作)。在下面的代码中,在执行时,它会出现一个错误:“people is not defined”。我没有正确地定义它还是语法错误?这是Python 3

def verifylogin():
people={}
with open("moosebook.txt","r") as f:
for line in f:
    items=line.split(",")
    person={}
    person['username'] =items[0]
    person['password']=items[1]
    person['Gender']=items[2]
    person['Career']=items[3]
    people[items[0]]=person

    print(person[0])

Tags: 文件字符串代码字典定义isdef错误
2条回答

我不知道你对剧本的最终意图是什么,但下面的内容可能会有所帮助。Python有一个内置的CSV模块,它可以自动将文件的每一行作为列的列表读入。在

此外,它还有一个CSV ^{}变体,可能对您更有用。这将获取CSV文件中的第一行,并在读入时使用头为每一行自动创建一个字典。在

如果文件不包含标题行,则可以提供合适的fieldnames列表。你不需要用这个功能来创建你的字典。在

下面展示了如何创建people字典。键是每行的username。我将username键从person中删除,因为它成为people使用的密钥:

import csv

def verifylogin():
    people = {}

    with open("moosebook.txt","r") as f:
        for person in csv.DictReader(f):
            print("Person: ", person)
            username = person['username']
            del person['username']
            people[username] = person

    print("People:", people)
    print("Wilma's career:", people['Wilma']['Career'])     

verifylogin()

因此,如果moosebook.txt包含以下条目:

^{pr2}$

您将看到以下输出:

Person:  {'Career': 'Builder', 'password': 'Password1', 'username': 'Fred', 'Gender': 'Male'}
Person:  {'Career': 'Teacher', 'password': 'Password2', 'username': 'Wilma', 'Gender': 'Female'}
People: {'Wilma': {'Career': 'Teacher', 'password': 'Password2', 'Gender': 'Female'}, 'Fred': {'Career': 'Builder', 'password': 'Password1', 'Gender': 'Male'}}
Wilma's career: Teacher

如果文件没有标题行,则可以更改以下行:

csv_input = csv.DictReader(f, fieldnames=['username', 'password', 'Gender', 'Career'])

正如您从注释中看到的那样,缩进是错误的,但是我想这是因为粘贴在这里,而不是实际代码中的问题。在

但你的代码中还有两个问题。print(person[0])在执行时将失败,因为0不是字典的有效键。代码中唯一有效的键是usernamepasswordGender和{}。因此,您可以使用personpeople[items[0]]。然后可以使用splitlines来避免数据中的换行。在

def verifylogin():
    people = {}
    with open("moosebook.txt", "r") as f:
        for line in f.read().splitlines():  # Fixed line
            items = line.split(",")
            person = {}
            person['username'] = items[0]
            person['password'] = items[1]
            person['Gender'] = items[2]
            person['Career'] = items[3]
            people[items[0]] = person
            print(people[items[0]])  # Fixed line

相关问题 更多 >