如何在不覆盖数据的情况下将数据存储在字典中?

时间:2017-08-19 13:06:00

标签: python python-2.7 dictionary

如何在不改写现有数据的情况下将数据存储在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"
        }
    ]
}

2 个答案:

答案 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的通用内置容器,字典,列表,集合和元组提供了替代方案。

Python Documentation