如何在不改写现有数据的情况下将数据存储在Python中的字典中?
例如:
output = {}
name = raw_input("Enter name")
age = input("Enter your age")
course = raw_input("Enter course")
school = raw_input("Enter school")
output['name'] = name
output['age'] = age
output['course'] = course
output['school'] = school
输出就是这个。
{
"name": "Student 1",
"age": 25,
"course": "BSCS",
"school": "School 1"
}
然后,如果我添加另一个字段,它将覆盖现有数据。
我怎样才能像这样存储它:
{
"students": [
{
"name": "Student1",
"age": 25,
"course": "BSIT",
"school": "School 1"
},
{
"name": "Student2",
"age": 26,
"course": "BSCS",
"school": "School 2"
},
{
"name": "Student3",
"age": 27,
"course": "BSCE",
"school": "School 3"
}
]
}
答案 0 :(得分:0)
密钥是唯一的,因此如果要在一个密钥中存储多个值,请将值设为列表或另一个字典,元组,自定义对象等。
E.g。
my_dict = {}
my_dict["students"] = []
my_dict["students"].append( new_dict )
我会考虑创建一个类或使用元组将学生数据存储在列表中,但是,如果你想要JSON格式,你可以使用其他词典,如:
new_dict = {"name": "Max", "age":12}
my_dict["students"].append( new_dict )
如果是某个对象,你可以使用:
class Student(object):
__init__(self, name, age):
self.name = name
self.age = age
所以现在你可以这样做:
my_dict.append( Student("max", 12) )
答案 1 :(得分:0)
您也可以使用内置的collections
模块和名为defaultdict
的类来解决它。
import collections as cl
output = cl.defaultdict(list)
for i in range(n):
name, age, course, school = map(str, raw_input().split())
age, key, value = int(age), "student" + str(i + 1), dict()
value["name"], value["age"], value["course"], value["school"] = name, age, course, school
output[key] = value
据文件说明
该模块实现了专门的容器数据类型,为Python的通用内置容器,字典,列表,集合和元组提供了替代方案。