1

我正在使用 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()

graph.request返回一个包含用户朋友的对象。如何比较两个检索对象列表中的内容。它不一定需要与 Facebook 相关。

(我知道这个问题可能很愚蠢,但这对我来说真的很痛苦。)

4

2 回答 2

1

如果你升级到 NDB,“in”操作符将真正起作用;NDB在 Model 实例上实现了适当的eq运算符。请注意,键也会被比较,因此具有相同属性值但不同键的实体被认为是不相等的。如果要忽略密钥,请考虑比较 e1._to_dict() == e2._to_dict()。

于 2012-08-21T03:43:08.390 回答
0

您应该编写一个自定义函数来比较您的对象,并将其视为嵌套字典的比较。由于您将仅比较属性而不是函数,因此您必须进行嵌套 dict 比较。原因:所有属性都将不可调用,并且希望不会以 _ 开头,因此您只需比较 obj 中的剩余元素。dict和方法应该是自下而上的,即首先完成嵌套级别的对象(例如,主对象可以托管其他对象,这些对象将有自己的dict

最后,您可以在这里考虑接受的答案代码:如何比较 Python 中的两个字典列表?

于 2012-08-19T20:33:05.170 回答