Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
102 / 85 / 25
Регистрация: 21.05.2019
Сообщений: 481

Когда длина словаря больше 100 записей, удалить первые 50

27.07.2021, 16:43. Показов 3446. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как сделать, чтобы когда длинна словаря больше 100 записей, удалялись первые 50 записей?

И как можно оптимизировать данную часть кода?

Суть:
Есть массив координат объектов + их id
Из цикла в цикл я ищу объекты которые находятся в range(10 * i - 5, 10 * i + 5) по оси x
Затем записываю номер границы в массив, удаляю дубликаты и считаю сколько всего объектов находилось на этой границе за всё время

Но мне кажется код не оптимальный, много проходов по одному и тому же словарю и массиву

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
from dataclasses import dataclass
 
 
@dataclass
class Foo:
    info = {}
    num_obj = [0, 0, 0, 0, 0]
 
    def main(self):
 
        while True:
            for x, y, id in self.coord_func():
 
                try:
                    for i in range(5):
                        if x in range(10 * i - 5, 10 * i + 5):
                            self.info[id] += ["Находится на границе {}".format(i)]
                            self.info[id] = list(set(self.info[id]))
                        self.num_obj[i] = sum("Находится на границе {}".format(i) in x for x in self.info.values())
 
                except KeyError:
                    self.info[id] = []
 
            if len(self.info) > 100: # Here
                pass  
 
    def coord_func(self) -> list:
        return []
 
 
if __name__ == '__main__':
    Foo().main()
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.07.2021, 16:43
Ответы с готовыми решениями:

Если длина строки S больше N, то отбросить первые символы
Дана строка S и число N. Преобразовать строку S в строку длины N следующим образом: если длина строки S больше N, то отбросить первые...

Если длина строки S больше N, то отбросить первые символы
Дано целое число N (> 0) и строка S. Преобразовать строку S в строку длины N следующим образом: если длина строки S больше N, то ...

Если длина строки S больше N, то отбросить первые символы
Помогите пожалуйста. Дано целое число N(>0) и строка S. Преобразовать строку S в строку длинны N следующим образом: если длина строки S...

8
 Аватар для Matrix3007
198 / 164 / 41
Регистрация: 13.05.2019
Сообщений: 844
01.08.2021, 14:54
Лучший ответ Сообщение было отмечено RSAX как решение

Решение

Цитата Сообщение от RSAX Посмотреть сообщение
Как сделать, чтобы когда длинна словаря больше 100 записей, удалялись первые 50 записей?
Python
1
2
if len(dictionary)>100:
    dictionary={x:y for x,y in list(dictionary.items())[50:]}
1
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
01.08.2021, 15:59
RSAX, Словари не упорядоченные множества. Поэтому бессмысленно говорить об первых 50 элементах словаря. Условие не коректное. В словаре не записи а элементы. Словарь не упорядочен. Если Вам нужно расположить элементы словаря, что бы они были упорядочены по ключу? Тогда нужно преобразовать словарь в список пар, где список с помощью lambda упорядочен по первым элементам в парах, то есть по ключам словаря. Тогда имеет смысл говорить о первых 50 элементах.

Добавлено через 2 минуты
RSAX, Но глубоко вникать в Вашу задачу с координатами, я не стал, извините.
1
102 / 85 / 25
Регистрация: 21.05.2019
Сообщений: 481
03.08.2021, 14:22  [ТС]
Viktorrus, Почему "бессмысленно говорить об первых 50 элементах словаря"? Получается если я циклом добавляю элементы в словарь, и принтую этот самый словарь, то он будет выводить элементы словаря всегда в разном порядке?
0
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
03.08.2021, 20:49
Цитата Сообщение от RSAX Посмотреть сообщение
то он будет выводить элементы словаря всегда в разном порядке?
проверьте. все зависит от версии питона но в основном Viktorrus, вам правильно сказал. первое же что описывается про словари
Словарь — неупорядоченная структура данных, которая позволяет хранить пары «ключ — значение». но начиная с версии питона 3.6 вроде уже как упорядоченны но я бы на это сильно не надеялся
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
03.08.2021, 21:38
RSAX, В предыдущих версиях питона это действительно было так. Вы можете прочитать это у Лутца. В последних же версиях питона разработчики сделали так, что элементы словаря стали сохранять свою позицию, однако при этом словарь не является последовательностью, в которой мы можем обращаться к элементам по индексу (положению в последовательности). Для чего это сделано я не знаю, но видимо удобно в каких то случаях (например как в Вашем).
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
>>> d = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5, 'f':6}
>>> d
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}
>>> d[0]
Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    d[0]
KeyError: 0
>>> d1 = {'b': 2, 'a':1, 'd':4, 'c':3, 'f':6, 'e':5,}
>>> d is d1
False
>>> d == d1
True
>>> d2 = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5, 'f':6}
>>> d2 is d
False
>>> d2 == d
True
Во как теперь сделано. Словарь теперь сохраняет позиции своих элементов, но при этом не является последовательностью.
Словари с одинаковыми элементами, инициированные для разных элементов, это разные объекты в оперативной памяти, но они являются равными друг другу.
Нужно запомнить эту новую особенность словарей. Сохраню это в своей БД.
Кто изучает по Лутцу, учтите это.
RSAX, Так что я снимаю свое замечание, так как я работаю с питоном 3.8, где словари сохраняют позиции своих элементов.
Спасибо, что благодаря Вам я обратил на это внимание.

Добавлено через 2 минуты
Semen-Semenich, уточнил, с каких версий питона это произошло.

Добавлено через 15 минут
RSAX, Я кажется понял для чего это сделано.
Цитата (не помню, от куда):
"Однако в последних версиях Python словари являются итерируемыми объектами с
итератором, который автоматически возвращает по одному ключу за раз в контексте
итерации"
Видимо именно для этого сделано сохранение порядка в словарях.

Добавлено через 26 минут
RSAX, Возникает вопрос, а в чем же тогда проявляется неупорядоченность словарей?
В том, что при размещении элементов словаря в разных порядках, мы получаем равные словари.
Python
1
2
3
4
>>> d = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5, 'f':6}
>>> d2 = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5, 'f':6}
>>> d2 == d
True
В упорядоченных же списках при изменении положения их элементов, мы получаем не равные списки.
Python
1
2
3
4
>>> lst = ['a', 'b', 'c', 'd', 'e', 'f']
>>> lst1 = ['b', 'a', 'd', 'c', 'f', 'e']
>>> lst1 == lst
False
1
 Аватар для Matrix3007
198 / 164 / 41
Регистрация: 13.05.2019
Сообщений: 844
03.08.2021, 22:35
Viktorrus, Да, но ваш пример не особо хорошо это иллюстрирует

Цитата Сообщение от Viktorrus Посмотреть сообщение
>>> d = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5, 'f':6}
>>> d2 = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5, 'f':6}
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
04.08.2021, 01:08
Matrix3007, Извините, не ту строку выложил.
Python
1
2
3
4
>>> d = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5, 'f':6}
>>> d2 = {'b':2, 'a':1, 'd':4, 'c':3, 'f':6, 'e':5}
>>> d2 == d
True
2
102 / 85 / 25
Регистрация: 21.05.2019
Сообщений: 481
06.08.2021, 11:51  [ТС]
Viktorrus, Спасибо за объяснения, а то тоже работаю с 3.8 начал проверять и не понял как это словарь не последовательность, не знал что в старых версиях было по другому

последний пример и правда хорошо иллюстрирует вопрос
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.08.2021, 11:51
Помогаю со студенческими работами здесь

Строка: Если длина строки больше 10, то оставить только первые 6 символов...
Дана строка.Если ее длина больше 10,то оставить в строке только первые 6 символов,иначе дополнить строку символами 'о'до длины 12

Удалить из каждой строки файла первые K символов (если длина строки меньше K, то удалить из нее все символы)
Дано целое число K и текстовый файл. Удалить из каждой строки файла первые K символов (если длина строки меньше K, то удалить из нее все...

Оператор Merge. Объединить только первые 100 записей
Добрый день. Подскажите пожалуйста, возможно ли в операторе Merge ограничить проход? Допустим, мне нужно объединить только первые 100...

Заменить первые строчные буквы на заглавные в каждом слове, длина которого больше выбранно
Заменить первые строчные буквы на заглавные в каждом слове, длина которого больше выбранной. пжлста помогите.

Если длина строки больше 10 - оставить первые 6 символов, иначе дополнить строку символами 'о'
Дана строка.Если ее длина больше 10,то оставить в строке только первые 6 символов,иначедополнить строку символами 'о' до длины 12.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru