[英]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
對您的詞典而言不是有效鍵。 您代碼中唯一有效的密鑰是username
, password
, Gender
和Career
。 因此,您可以使用person
或people[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.