Сравните ключи в списке словарей - PullRequest
0 голосов
/ 08 апреля 2019

Я пытаюсь сравнить два списка словаря.Первый словарь имеет ключи «пары» и «проба».Этот словарь обратный, отсортированный по 'prob'.Затем элементы верхнего x-количества первого списка сравниваются со вторым списком, который имеет ключи «пар» и «расстояние».Я только сравниваю, чтобы увидеть, есть ли «пары» из первого списка во втором списке.Если он найден, мне нужно вести учет найденного совпадения.на выходе получается число совпадений

from operator import itemgetter
list1 = [
    {"pairs": (1, 107), "prob": .78},
    {"pairs": (1, 110), "prob": .98},
    {"pairs": (1, 111), "prob": .74},
    {"pairs": (1, 114), "prob": .42},
    {"pairs": (1, 74), "prob": .24},
    {"pairs": (1, 75), "prob": .25},
    {"pairs": (10, 24), "prob": .61},
    {"pairs": (10, 28), "prob": .40},
    {"pairs": (10, 77), "prob": .42},
    {"pairs": (10, 78), "prob": .60}]


list2 = [
    {"pairs": (1, 100), "distance": 7.507},
    {"pairs": (1, 110), "distance": 6.981},
    {"pairs": (1, 111), "distance": 6.741},
    {"pairs": (1, 114), "distance": 7.432},
    {"pairs": (1, 7), "distance": 5.247},
    {"pairs": (1, 75), "distance": 7.254},
    {"pairs": (11, 24), "distance": 7.611},
    {"pairs": (11, 20), "distance": 6.407},
    {"pairs": (10, 77), "distance": 6.422},
    {"pairs": (10, 78), "distance": 6.607}]

def analyze(expected,actual):

    matches = 0

    sorted_list = sorted(expected,key=lambda k: k['prob'],reverse=True)
    toptenth = len(sorted_list)/10
    topfifth = len(sorted_list)/5
    tophalf = len(sorted_list)/2

    for i in range(toptenth):
       if expected[i]..........

    print matches

Я не уверен, как сравнить верхнее число элементов в списке один с парами списка 2. Я подумал, что каждый элемент в списке один должен иметь нужный мне диапазон(верхняя десятая, верхняя пятая и верхняя половина), затем итерация по элементу в списке 2. Но я не знаю, имеет ли значение изменяющийся размер между списком 1 и списком 2, и я не знаю, как просто сравнить значение ключа «пары»

1 Ответ

0 голосов
/ 08 апреля 2019

Ваш вопрос не совсем понятен.Например, вы берете верхние 1/10, 1/5 и 1/2 первого списка, но не указываете, из какого соотношения вы хотите взять количество совпадений.В любом случае, это некоторый код, который может помочь вам решить вашу проблему.Я отредактирую его, если вы предоставите больше информации.

def analyze(expected,actual):

    sorted_list = sorted(expected, key=lambda k: k['prob'],reverse=True)
    toptenth = sorted_list[:int(len(sorted_list)/10)]
    topfifth = sorted_list[:int(len(sorted_list)/5)]
    tophalf = sorted_list[:int(len(sorted_list)/2)]

    actual_pairs = [el["pairs"] for el in actual]

    matching_tenth = len([el for el in toptenth if el["pairs"] in actual_pairs])
    matching_fifth = len([el for el in topfifth if el["pairs"] in actual_pairs])
    matching_half = len([el for el in tophalf if el["pairs"] in actual_pairs])
    return {    "tenth": matching_tenth,
                "fifth": matching_fifth,
                "half": matching_half}

print (analyze(list1, list2))

Вывод:

{'tenth': 1, 'fifth': 1, 'half': 3}
...