结构存储多个键和值的最佳建议 - 字典?

时间:2017-07-05 10:42:57

标签: python facebook dictionary structure profile

目的是创建一个facebook类型程序的开头(用于教学目的),该程序存储个人姓名列表及其生物详细信息。

我有两个问题,一个是下一个问题:

问题1 :如何获取列表值,它们是字典中键值对中值的一部分。例如,要找出约翰和玛丽的朋友有什么共同点,在这种情况下 friend1和friend3

问题2:创建存储姓名,性别,爱好和朋友的结构的最佳方法是什么?这是一本字典,如果是这样,怎么定义?如果没有,人们会建议什么?

#create a dictionary that stores names, and a list of friends
facebook_profile={"John":["friend1","friend2","friend3","friend4"],"Mary":["friend1","friend7","friend3","friend9"]}
print(facebook_profile)

需要存储并随后打印以下样本数据:

Name:John
Gender: Male
Hobbies: Chess
Friends: friend1,friend2,friend3,friend4

Name: Mary
Gender: Female
Hobbies: Chequers
Friends: friend1,friend2,friend3,friend4    

我知道最好的解决方案是数据库,并使用某种文件处理来实现它,但是,出于教学目的,我们只尝试使用列表或词典。然后可以将这些词典/列表写入文件,但我想要的解决方案/答案最好只使用列表和字典结构。

4 个答案:

答案 0 :(得分:0)

另一种方法是在数据库中存储表列和与该表具有多对多关系的表。

答案 1 :(得分:0)

对于问题1,一组是快速,轻松地计算交叉点的好选择。 对于问题2,字典效果很好。

例如:

facebook_profile={
    "John":{"friends":{"friend1","friend2","friend3","friend4"},"Gender": "Male"},
    "Mary":{"friends":{"friend1","friend7","friend3","friend9"},"Gender": "Female"}
}
mutual_friends = facebook_profile["John"]["friends"].intersection(facebook_profile["Mary"]["friends"])
print (mutual_friends)

提供输出:

{'friend1', 'friend3'}

答案 2 :(得分:0)

编辑您编辑的答案仅表明您想要列表和字典,所以也许这不适合您,但是,类是实现复杂类似重复对象信息存储的最佳方式许多功能,所以我会把它留在这里

随着这变得越来越复杂,嵌套的词典可能是一个真正的头痛,我建议你定义一个class,如下所示:

class Person()
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender

对于该课程,您可以定义各种方法,例如寻找共同的朋友:

class Person()
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender
        self.friends = []
        self.hobbies = []
    def add_friends(self, list_of_friends):
        self.friends += list_of_friends
    def add_hobbies(self, list_of_hobbies):
        self.hobbies += list_of_hobbies
    def mutual_friends(self, another_person):
        return list(set(another_person.friends).intersection(self.friends))

然后你所要做的就是初始化每个朋友并开始运行各种方法

john = Person('John', 'Male')
john.add_friends(['friend1', 'friend2', ...]
mary = Person('Mary', 'Female')
mary.add_friends(['friend3', 'friend7', ...]
common_friends = john.mutual_friends(mary)
print(common_friends) # Will print a list of mutual friends

和其他人一样,对于长篇朋友列表,更有效的方法是set使用intersection

答案 3 :(得分:0)

创建一个类:

class Person:

  def __init__(self, name, gender, hobbies, friends):
    self.name = name
    self.gender = gender
    self.hobbies = hobbies
    self.friends = friends

  def getMutualFriends(self, personB):
    return list(set(personB.friends).intersection(self.friends))

person1 = Person('John', 'male', ['Chess'], ['friend1', 'friend2'])
person2 = Person('Anna', 'female', ['Soccer'], ['friend1', 'friend3'])

print(person1.getMutualFriends(person2))