создать список ближайших пользователей, используя python - PullRequest
0 голосов
/ 05 марта 2019

У меня есть список пользователей со значениями широты и долготы для каждого.Я пытаюсь создать список "соседних пользователей" для каждого пользователя.Я считаю, что мой расчет расстояния работает, но я застрял, создавая список для каждого пользователя.

users = [

{'email':'austin1@gmail.com', 'lat': 30.3, 'long': -97.67, 'nearby_users': []},
{'email':'austin2@gmail.com', 'lat': 30.2, 'long': -97.73,'nearby_users': []},
{'email':'austin3@gmail.com', 'lat': 30.26, 'long': -97.74,'nearby_users': []},
{'email':'palm_beach@gmail.com', 'lat': 26.62, 'long': -80.05, 'nearby_users': []}
]

radius = 1

def compare_users(user_a, user_b):

a_email = user_a['email']
a_lat = float(user_a['lat'])
a_long = float(user_a['long'])
a_nearby_users = user_a['nearby_users']

b_email = user_b['email']
b_lat = float(user_b['lat'])
b_long = float(user_b['long'])
b_nearby_users = user_b['nearby_users']

if b_lat > (a_lat - radius):
    if b_lat < (a_lat + radius):
        if b_long > (a_long - radius):
            if b_long < (a_long + radius):

                b_nearby_users.append(a_email)

for user_a in range(len(users)):
    for user_b in range(user_a + 1, len(users)):
        compare_users(users[user_a], users[user_b])

Я ожидаю увидеть взаимных соседних пользователей, и это не происходит логичным образом.Вот результаты, которые я получаю:

[{'email': 'austin1@gmail.com', 'lat': 30.3, 'long': -97.67, 'nearby_users': []},
{'email': 'austin2@gmail.com', 'lat': 30.2, 'long': -97.73, 'nearby_users': ['austin1@gmail.com']},
{'email': 'austin3@gmail.com', 'lat': 30.26, 'long': -97.74, 'nearby_users': ['austin1@gmail.com', 'austin2@gmail.com']},
{'email': 'palm_beach@gmail.com', 'lat': 26.62, 'long': -80.05, 'nearby_users': []}]

Спасибо за помощь!

1 Ответ

0 голосов
/ 05 марта 2019

Когда я добавил следующее, как предлагал мой комментарий, я думаю результат был правильным:

users = [

{'email':'austin1@gmail.com', 'lat': 30.3, 'long': -97.67, 'nearby_users': []},
{'email':'austin2@gmail.com', 'lat': 30.2, 'long': -97.73,'nearby_users': []},
{'email':'austin3@gmail.com', 'lat': 30.26, 'long': -97.74,'nearby_users': []},
{'email':'palm_beach@gmail.com', 'lat': 26.62, 'long': -80.05, 'nearby_users': []}
]

radius = 1

def compare_users(user_a, user_b):

    a_email = user_a['email']
    a_lat = float(user_a['lat'])
    a_long = float(user_a['long'])
    a_nearby_users = user_a['nearby_users']

    b_email = user_b['email']
    b_lat = float(user_b['lat'])
    b_long = float(user_b['long'])
    b_nearby_users = user_b['nearby_users']

    if b_lat > (a_lat - radius):
        if b_lat < (a_lat + radius):
            if b_long > (a_long - radius):
                if b_long < (a_long + radius):
                    a_nearby_users.append(b_email)
                    b_nearby_users.append(a_email)

for user_a in range(len(users)):
    for user_b in range(user_a + 1, len(users)):
        compare_users(users[user_a], users[user_b])
print(users)

Выходы:

[{'near_users': ['austin2@gmail.com', 'austin3@gmail.com'], 'lat': 30,3, 'email': 'austin1@gmail.com', 'long': -97.67}, {'поблизости_пользователи':['austin1@gmail.com', 'austin3@gmail.com'], 'lat': 30,2, 'email': 'austin2@gmail.com', 'long': -97.73}, {'поблизости_пользователи': [«austin1@gmail.com», «austin2@gmail.com»], «lat»: 30,26, «email»: «austin3@gmail.com», «long»: -97,74}, {«поблизости_пользователи»: [], 'lat': 26,62, 'email': 'palm_beach@gmail.com', 'long': -80.05}]

...