'if'元素不在 Google App Engine 的列表中



我正在使用谷歌应用引擎为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列表?

最新更新