Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有人能帮我让Python代码不那么难看吗?在应用程序上查找Facebook好友,而不是在应用程序上查找_Python_Django_Facebook_Dictionary - Fatal编程技术网

有人能帮我让Python代码不那么难看吗?在应用程序上查找Facebook好友,而不是在应用程序上查找

有人能帮我让Python代码不那么难看吗?在应用程序上查找Facebook好友,而不是在应用程序上查找,python,django,facebook,dictionary,Python,Django,Facebook,Dictionary,该代码获取使用我们应用程序的用户的所有Facebook好友,并返回一个字典,其中包含他们在数据库中的id键和默认连接级别的值 该代码还应返回所有未使用我们应用程序的用户Facebook好友 我把fb_id_on_应用程序做成了一个包含facebook_id密钥的字典,这样我就可以利用O1查找字典的时间。如果我把它做成一个列表,它会是一个,其中n是列表的大小,用来检查值是否在其中 我相信有更好的方法可以做到这一点有什么想法吗?我们也在使用django框架 我现在只能看到一些小的改进,特别是在格式方

该代码获取使用我们应用程序的用户的所有Facebook好友,并返回一个字典,其中包含他们在数据库中的id键和默认连接级别的值

该代码还应返回所有未使用我们应用程序的用户Facebook好友

我把fb_id_on_应用程序做成了一个包含facebook_id密钥的字典,这样我就可以利用O1查找字典的时间。如果我把它做成一个列表,它会是一个,其中n是列表的大小,用来检查值是否在其中


我相信有更好的方法可以做到这一点有什么想法吗?我们也在使用django框架

我现在只能看到一些小的改进,特别是在格式方面:-:

DEFAULT_CONNECTION_LEVEL = 10
# Up to a whole day
UPDATE_FRIENDS_EVERY_N_MINUTES = 360


def find_friends_on_app(friends):
    """
    Checks each facebook id to find which facebook friends
    use our app
    """
    facebook_ids = [friend["id"] for friend in friends]
    dt_friends = User.objects.filter(
        facebook_id__in=facebook_ids)
    friends_on_app = {friend.id: DEFAULT_CONNECTION_LEVEL for friend in
                  dt_friends}
    fb_id_on_app = {friend.facebook_id: "value" for friend in
                dt_friends}
    friends_not_on_app = \
        [{'Name': friend.get("name"),
          'id': friend.get("id")} for friend in friends if
         fb_id_on_app.get(friend.get("id")) is None]
    return friends_not_on_app, friends_on_app

事实上,丑陋取决于过度使用friend和id及其变体,这使得很难区分每一步的friendxyz是什么,以及它的['id'],它的'.id',它的'.facebook_-id'之间的区别。。。如果没有对过度使用所掩盖的意图语义的深入理解,我无法修复这种丑陋-

这可能是一个更好的问题。嘿,谢谢,我做了你的改变。我喜欢使用集合,但我不知道它们是带伪值的字典,这基本上是我以前做过的。由于Pep8,格式有点奇怪。是的,十多年前,当我实现set的第一个版本时,它完全建立在dict之上——现在它是优化的C代码,不仅在适当的时候比dict更可读,而且还节省了一些内存。顺便说一句,我不知道我在任何地方违反了政治公众人物第8条。。。?
def find_friends_on_app(friends):
    friend_ids = User.objects.filter(facebook_id__in=[friend["id"] for friend in friends])
    friends_on_app = {friend.id: DEFAULT_CONNECTION_LEVEL for friend in friend_ids}
    fb_id_on_app = set(f.facebook_id for f in friend_ids)
    friends_not_on_app = [{'Name': friend.get("name"), 'id': friend.get("id")}
                          for friend in friends if friend.get('id') not in fb_id_on_app]
    return friends_not_on_app, friends_on_app