Проверка массивов словаря в python - PullRequest
1 голос
/ 16 марта 2019

У меня есть 2 словаря с массивами. Я хочу, чтобы словарь из первичного списка использовался только в том случае, если во вторичном списке словаря «ведра» отображаются слова «buckets», а «метки» совпадают.

primary = [{'buckets': [165, 27],
   'label': 'Andrew'}, {'buckets': [1364],
   'label': 'Matt'},{'buckets':[500, 60, 888], 'label':'John'}]

secondary = [{'buckets': [165, 1447],
  'label': 'Andrew'}, {'buckets': [1365, 15, 16],
  'label': 'Matt'}, {'buckets':[12,10,15], 'label':'Max'}]

data = {}

for x in primary:
    found = False
    for i in secondary:

        for num in x['buckets']:
            if x['label'] == i['label']:
                if num in i['buckets']:
                    found =True
                    break
    if found:
        data[x['label']] = x['buckets']
    else:
        data[i['label']] = i['buckets']

pprint.pprint(data)

Если я изменю совпадения / числа в массиве, я не получу правильные результаты. Любая помощь будет принята с благодарностью.

Desired output:
{'Andrew': [165, 27], 'Matt': [1365, 15, 16]}

Это происходит иногда, но если я изменю числа Эндрюса на вторичные, это может закончиться именно этим.

{'Matt': [1365, 15, 16]}

1 Ответ

1 голос
/ 16 марта 2019

Вот решение.Основной момент, который я здесь использую, это intersection, чтобы проверить, существует ли общее значение между двумя списками.Если есть, то я беру список из primary.Если нет, то вы берете список из secondary, как вы объяснили в комментарии ниже.Вам не нужен тег found

data = {}

for x in primary:
    for i in secondary:
        if x['label'] == i['label']:
            if list(set(x['buckets']).intersection(i['buckets'])):
                    data[x['label']] = x['buckets']
                    break
            else:
                data[x['label']] = i['buckets']

print(data)
# {'Andrew': [165, 27], 'Matt': [1365, 15, 16]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...