簡體   English   中英

在Python 3中定義字典

[英]Defining a dictionary in Python 3

我有以下代碼,並希望將文件中的字符串轉換成字典(以進行讀取和操作)。 在下面的代碼中,執行時會出現錯誤:“人員未定義”。 我是否定義不正確或語法錯誤? 這是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])

從注釋中可以看到,縮進是錯誤的,但是我想這是由SO上的粘貼引起的,而不是實際代碼中的問題。

但是您在代碼中還有另外兩個問題。 print(person[0])在執行時將失敗,因為此處0對您的詞典而言不是有效鍵。 您代碼中唯一有效的密鑰是usernamepasswordGenderCareer 因此,您可以使用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

我不確定腳本的最終用途是什么,但是以下內容可能會有所幫助。 Python有一個內置的CSV模塊,可以自動以列列表的形式讀取文件的每一行。

此外,它具有CSV DictReader變體,可能對您更有用。 這將獲取CSV文件中的第一行,並使用標題為讀入的每一行自動創建一個字典。

如果您的文件不包含標題行,則可以提供適當的fieldnames列表。 通過使用此功能,您無需創建字典。

下面顯示了如何創建people詞典。 密鑰是每行的username 我從person刪除username密鑰,因為它變成了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包含以下條目:

username,password,Gender,Career
Fred,Password1,Male,Builder
Wilma,Password2,Female,Teacher

您將看到以下輸出:

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'])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM