Попытка получить похожее имя пользователя из шести разных файлов - PullRequest
0 голосов
/ 21 июня 2020

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

Вот мой код для открытия и чтения json файлов со списком подписчиков и сортировки их в словаре в соответствии с их первыми двумя буквами и сравнения их

import json

with open('./JSONs Old/A.json', 'r', encoding='utf-8') as f:
    A = json.load(f)
with open('./JSONs Old/B.json', 'r', encoding='utf-8') as f:
    B = json.load(f)
with open('./JSONs Old/C.json', 'r', encoding='utf-8') as f:
    C = json.load(f)
with open('./JSONs Old/D.json', 'r', encoding='utf-8') as f:
    D = json.load(f)
with open('./JSONs Old/E.json', 'r', encoding='utf-8') as f:
    E = json.load(f)
with open('./JSONs Old/F.json', 'r', encoding='utf-8') as f:
    F = json.load(f)
with open('./JSONs Old/G.json', 'r', encoding='utf-8') as f:
    G = json.load(f)

Als = {}
Bls = {}
Cls = {}
Dls = {}
Els = {}
Fls = {}
Gls = {}

# Loop For A
for each in A:
        if each['id'][:2] in Als.keys():
             Als[each['id'][:2]].append(each)
        else:
            Als[each['id'][:2]] = [each]

# Loop For B
for each in B:
        if each['id'][:2] in Bls.keys():
             Bls[each['id'][:2]].append(each)
        else:
            Bls[each['id'][:2]] = [each]

# Loop For C
for each in C:
        if each['id'][:2] in Cls.keys():
             Cls[each['id'][:2]].append(each)
        else:
            Cls[each['id'][:2]] = [each]

# Loop For D
for each in D:
        if each['id'][:2] in Dls.keys():
             Dls[each['id'][:2]].append(each)
        else:
            Dls[each['id'][:2]] = [each]

# Loop For E
for each in E:
        if each['id'][:2] in Els.keys():
             Els[each['id'][:2]].append(each)
        else:
            Els[each['id'][:2]] = [each]

# Loop For F
for each in F:
        if each['id'][:2] in Fls.keys():
             Fls[each['id'][:2]].append(each)
        else:
            Fls[each['id'][:2]] = [each]

# Loop For G
for each in G:
        if each['id'][:2] in Gls.keys():
             Gls[each['id'][:2]].append(each)
        else:
            Gls[each['id'][:2]] = [each]

matchls = []
for i in B:
    if (i['id'][:2] in Als.keys()) and (i['id'][:2] in Cls.keys()) and (i['id'][:2] in Dls.keys()) and (i['id'][:2] in Els.keys()) and (i['id'][:2] in Fls.keys()) and (i['id'][:2] in Gls.keys()):
        matchls.append(i)

print(matchls)

Файлы Json имеют список всех подписчиков У человека есть на своей странице Instagram и в контейнере списка две пары значений ключа, например, следующие

[
  {
    "name": "Name1",
    "id": "username1"
  },
  {
    "name": "Name2",
    "id": "username2"
  }
]

Я хочу проверить, есть ли идентификатор из одного файла в других пяти файлах. Заранее спасибо.

1 Ответ

1 голос
/ 25 июня 2020

Вот один из способов сделать это без сортировки:

Используя эту функцию, вы можете увидеть, есть ли идентификатор подписчика в каких-либо других json списках

# (param 1) follower: a single dict with including a key 'id'
# (param 2) follower_lists: list of loaded json files to check an id match
def compareFollowers(follower, follower_lists):
    for list in follower_lists: # loop through each json file
        if not any(follower['id'] == f['id'] for f in list): # check if the id is the same as another from the list
            return False # if there is no common ids, return False

    return True # if every list had a common id return True

FYI any() функция возвращает значение boolean:

  • True, если хотя бы один элемент итерируемого значения истинно
  • False, если все элементы ложны или если итерируемый объект пуст

для печати всех общих подписчиков между всеми файлами вы можете сделать это:

import json

with open('./JSONs Old/A.json', 'r', encoding='utf-8') as f:
    A = json.load(f)
with open('./JSONs Old/B.json', 'r', encoding='utf-8') as f:
    B = json.load(f)
with open('./JSONs Old/C.json', 'r', encoding='utf-8') as f:
    C = json.load(f)
with open('./JSONs Old/D.json', 'r', encoding='utf-8') as f:
    D = json.load(f)
with open('./JSONs Old/E.json', 'r', encoding='utf-8') as f:
    E = json.load(f)
with open('./JSONs Old/F.json', 'r', encoding='utf-8') as f:
    F = json.load(f)
with open('./JSONs Old/G.json', 'r', encoding='utf-8') as f:
    G = json.load(f)


follower_lists = [B, C, D, E, F, G] # include every list but the first

for follower in A: # loop through the first list and compare each follower's id
    if compareFollowers(follower, follower_lists):
        print(follower)

...