我正在尝试写入 python 中的文本文件,其中文件中的输出。 我有一个名为电话簿的类,它有一个包含电话簿类对象的列表。
我的构造函数如下所示:
def __init__(self,name,number):
self.name = name
self.number = number
当我向列表添加新对象时,如下所示:
def add(self):
name = input()
number = input()
p = Phonebook(name,number)
list.append(p)
当我将列表写入文本文件时,函数如下所示:
def save():
f = open("textfile.txt","w")
for x in list:
f.write(x.number+";"+x.name+";")
f.close()
它写出:
12345;david;12345;dave;12345;davey;09876;cathryn;09876;cathy; and so on..
应该看起来像这样:
12345;david,dave,davey
09876;cathryn,cathy,
78887;peter,pete,petr,petemon
我的问题是..我如何实现这个保存功能,以便它只写出一个唯一的号码以及与该号码相关的所有名称? 感觉只用包含姓名和数字的列表是不可能的。也许我错了..
最佳答案
Python 中的字典可让您根据键快速访问项目。因此,解决您的问题的一个好方法是使用 Phonebook.number
作为将 Phonebooks
列表存储为的键来索引 Phonebook
对象值(value)。然后最后根据您希望每行显示的方式处理打印。
这个示例应该适用于您的情况:
phone_dict = dict() # Used to store Phonebook objects intead of list
def add(self):
name = input()
number = input()
p = Phonebook(name,number)
if p.number in phone_dict:
phone_dict[p.number].append(p) # Append p to list of Phonebooks for same number
else:
phone_dict[p.number] = [p] # Create list for new phone number key
def save():
f = open("textfile.txt","w")
# Loop through all keys in dict
for number in phone_dict:
f.write(x.number + ";") # Write out number
phone_books = phone_dict[number]
# Loop through all phone_books associated with number
for i, pb in enumerate(phone_books):
f.write(pb.name)
# Only append comma if not last value
if i < len(phone_books) - 1:
f.write(",")
f.write("\n") # Go to next line for next number
f.close()
关于python - 使用Python中的列表以特定方式写入文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52731733/