我正在使用谷歌应用引擎为Facebook构建一个应用程序。我试图将我用户的Facebook帐户中的朋友与我应用程序中已有的朋友进行比较,这样,如果他们是Facebook中的朋友,但不是我应用程序的朋友,或者如果他们已经是两者的朋友,我就可以将他们添加到数据库中。我在尝试这样的东西:
request = graph.request("/me/friends")
user = User.get_by_key_name(self.session.id)
list = []
for x in user.friends:
list.append(x.user)
for friend in request["data"]:
if User.get_by_key_name(friend["id"]):
friendt = User.get_by_key_name(friend["id"])
if friendt.key not in user.friends:
newfriend = Friend(friend = user,
user = friendt,
id = friendt.id)
newfriend.put()
CCD_ 1返回一个带有用户好友的对象。如何比较两个检索对象列表中的内容。它不一定需要与Facebook相关。
(我知道这个问题可能很傻,但对我来说真的很痛苦。)
如果升级到NDB,"in"操作符将实际工作;NDB在Model实例上实现了一个适当的eq运算符。请注意,键也会进行比较,因此具有相同属性值但不同键的实体被视为不相等。如果您想忽略该键,请考虑比较e1.to_dict()==e2.to_dick().
您应该编写一个自定义函数来比较对象,并将其视为嵌套字典的比较。由于您将只比较属性而不比较函数,因此必须进行嵌套dict比较。原因:所有属性都是不可调用的,希望不会以_开头,所以你只需要比较obj的剩余元素。dict,方法应该自下而上,即首先完成嵌套级别的对象(例如,主对象可以托管其他对象,这些对象将有自己的dict)
最后,您可以在这里考虑公认的答案代码:如何比较Python中的两个dict列表?