Как изменить порядок словарей в списке?

#python #dictionary

Вопрос:

У меня есть 2 длинных списка словарей. Формат списков выглядит следующим образом:

 myList1 = [{'id':1, 'bar':14},
           {'id':2, 'car':641},
           {'id':3, 'tar':84},
           {'id':12, 'bar':14},
           {'id':52, 'car':641},
           {'id':6, 'tar':84}]


myList2 = [{'id':12, 'bar':14},
           {'id':2, 'car':641},
           {'id':3, 'tar':84},
           {'id':1, 'bar':14},
           {'id':52, 'car':641},
           {'id':6, 'tar':84}]
 

Я хочу, чтобы последние 1000 словарей в обоих списках были одинаковыми (один и тот же «идентификатор»). Есть какие-нибудь предложения?

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

Комментарии:

1. Почему? Это неподходящая структура данных для этих данных. У вас должен быть словарь, в котором указан ключ id , а другие данные являются значением.

2. Почему вы сохраняете две идентичные копии своих данных?

3. Есть ли что-то конкретное в порядке второго списка, который вы хотите сохранить, или вы просто хотите, чтобы оба списка имели одинаковый порядок?

4. Подожди, подожди… вы хотите, чтобы только последние 1000 словарей были одинаковыми? Почему?

5. Я хочу, чтобы последние словари в обоих списках были одинаковыми. Например, последние 3 элемента обоих списков должны быть id: 1, id 52, id:6. Примеры-это игрушечные примеры, у меня есть два списка, которые длиннее 3000. Я хочу, чтобы последние 1000 словарей в обоих списках были одинаковыми

Ответ №1:

 myList1 = [{'id':1, 'bar':14},
           {'id':2, 'car':641},
           {'id':3, 'tar':84},
           {'id':12, 'bar':14},
           {'id':52, 'car':641},
           {'id':6, 'tar':84}]


myList2 = [{'id':12, 'bar':14},
           {'id':2, 'car':641},
           {'id':3, 'tar':84},
           {'id':1, 'bar':14},
           {'id':52, 'car':641},
           {'id':6, 'tar':84}]

mySortedList1 = sorted(myList1, key=lambda item: item["id"])
mySortedList2 = sorted(myList2, key=lambda item: item["id"])

# check that it works
from itertools import islice
start1 = max(0, len(mySortedList1)-1000)
start2 = max(0, len(mySortedList2)-1000)
assert myList1[start1:] == myList2[start2:]
 

Это не работает с данными вашего примера, потому что у вас меньше 1000 общих последних элементов.