@spbpython

Страница 157 из 785
Alex
04.10.2016
12:58:27
http://www.360cities.net/image/roma-san-pietro-naples

Aleksander
04.10.2016
12:58:51
HR?
на последнем бир митапе говорил вроде на spb lug приходят)

Alex
04.10.2016
12:59:17
в этом месте меня чуть не убили

я попытался штатив вытащить

Google
Alex
04.10.2016
13:00:01
он у меня на шестиствольный пулемет похож

а так итальянцы прикольные

Tatiana
04.10.2016
13:15:35
привет всем!

не могу сообразить, помогите блондинке

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

задача: удалить из списка те словари, в которых значения ключей совпадают

Serge
04.10.2016
13:17:03
всех?

Tatiana
04.10.2016
13:17:09
нет, только 1

пример щас дам

Serge
04.10.2016
13:17:24
если одно значение совпадает, весь словарь удалять?

Tatiana
04.10.2016
13:18:39
l = [{key1: 'a'; key2: 'b'}, {key1: 'c'; key2: 'd'}, {key1: 'e'; key2: 'b'}] вот для такого списка надо удалить либо первый словарь, либо последний, ибо в нем совпадают значения ключей key2

какой именно удалять - все равно

Google
Tatiana
04.10.2016
13:19:41
должен остаться только один

у меня получается, если такие словари являются соседними

но если они в произвольных местах списка - то уже нет

Dmitry
04.10.2016
13:33:57
тут нужно в правильном порядке удалять ведь если удалить из l = [{key1: 'a', key2: 'b'}, {key1: 'c', key2: 'd'}, {key1: 'e', key2: 'b'}, {key1: 'a', key2: 'z'}] первый (key1 = 'a'), то будет [{key1: 'c', key2: 'd'}, {key1: 'e', key2: 'b'}, {key1: 'a', key2: 'z'}] а если 3-ий (key1 = 'a'), а затем первый (key2 = 'b'), то будет другой результат [{key1: 'c', key2: 'd'}, {key1: 'e', key2: 'b'}]

Roman
04.10.2016
13:34:18
да
это хорошо, потому что полная проверка идентичности рождает флейм про алгоритмическую сложность )))

Tatiana
04.10.2016
13:35:23
т.е. меня на выходе любой результат устроит

а, я забыла важное

проверять надо только одинаковость значений конкретных ключей

т.е. по всему списку сверяем только key2

извините :(

Tatiana
04.10.2016
13:38:16
эээ...
плохо сформулировала?

а блин, это ж и так понятно

тут нужно в правильном порядке удалять ведь если удалить из l = [{key1: 'a', key2: 'b'}, {key1: 'c', key2: 'd'}, {key1: 'e', key2: 'b'}, {key1: 'a', key2: 'z'}] первый (key1 = 'a'), то будет [{key1: 'c', key2: 'd'}, {key1: 'e', key2: 'b'}, {key1: 'a', key2: 'z'}] а если 3-ий (key1 = 'a'), а затем первый (key2 = 'b'), то будет другой результат [{key1: 'c', key2: 'd'}, {key1: 'e', key2: 'b'}]
условие такое: заранее известно, что нас не интересуют значения key1 (им можно быть одинаковыми), а интересуют только словари, у которых одинаковые значения key2. вот из таких двух нужно оставить один любой

и вот тогда в примере с l = [{key1: 'a', key2: 'b'}, {key1: 'c', key2: 'd'}, {key1: 'e', key2: 'b'}, {key1: 'a', key2: 'z'}] удаляем либо первый, либо третий словарь

вопрос снят :)

Roman
04.10.2016
14:11:32
а есть какой-нибудь вариант collections.Counter с хранением в mongodb?

Google
Serge
04.10.2016
14:30:45
ты в какой момент персистить хочешь?:)

Roman
04.10.2016
14:36:42
да вот задумался, а надо ли. хочется из разных мест приложения всякую статистику отправлять

Serge
04.10.2016
14:39:15
ну, можно даже забавно на инкрементах сделать...

Roman
04.10.2016
14:41:34
Zart
04.10.2016
16:28:49
дикт компрехеншеном выдергиваем кей2 и создаем дикт где оные значения будут ссылаться на оригинальный дикт - это примерно как сделать set(somelist) для уникальности, но через дикт, и дёрнуть потом лишь значения

Tatiana
04.10.2016
16:37:52
list({d['key2']: d for d in list_of_dicts}.values())
ой прям вообще красота в одну строчку. спасибо!

Dmitry мне другой вариант предложил, но более громоздкий

спасибо еще раз! то, что надо :)

Serge
04.10.2016
17:02:01
ой прям вообще красота в одну строчку. спасибо!
эту красоту я бы из кода выпилил каленым железом. через пару недель никто уже не вспомнит что оно делает

Zart
04.10.2016
17:02:52
да, поэтому ты нахуячишь сет, цикл с ифом и дебильный remove, если совсем постараешься

Tatiana
04.10.2016
17:02:54
но я поняла, что в рабочем коде так делать не надо

Zart
04.10.2016
17:03:07
не забудь потом еще покрыть килобайтом тестов

Tatiana
04.10.2016
17:03:22
у меня маленький учебный проект

Serge
04.10.2016
17:25:51
Dmitry
04.10.2016
17:26:07
это code golf

Zart
04.10.2016
17:26:17
тссс.. человек за две недели забудет что такое дикт компрехеншен

Google
Serge
04.10.2016
17:26:28
после }.values() я начинаю хотеть это выпилить

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

Zart
04.10.2016
17:27:19
ну нарисуй альтернативу?

или там разбей это на две строки с d.values() отдельно

Serge
04.10.2016
17:28:09
ну разве что разбить

я вот смотрю, кроме этого ничего в голову не приходит;)

Zart
04.10.2016
17:28:28
а то ощущение что ты хочешь навернуть тазик явы

Serge
04.10.2016
17:28:43
не, просто это сразу не читается, вот сразу

но в таких случаях, скорее всего, можно просто подумать как мы к этому пришли и не приходить;)

Zart
04.10.2016
17:29:53
unique_by_key2 = {d['key2']: d for d in dictlist} return list(unique_by_key2.values())

Admin
ERROR: S client not available

Serge
04.10.2016
17:30:10
во! а зачем там list? :)

Zart
04.10.2016
17:30:15
для третьего питона

в задаче требовалось получить list. в тройке values - прокси-итератор

Serge
04.10.2016
17:30:41
в смысле? когда понадобится, тогда и надо list делать

Zart
04.10.2016
17:30:48
была б двойка, можно было б выкинуть

Serge
04.10.2016
17:31:21
ну, вот задача явно выбернута из плохо кода, мы ее решили не смотря на него и еще немного его ухудшили

Zart
04.10.2016
17:31:26
ну без контекста я хз, просто values должно хватать в обычном коде

Serge
04.10.2016
17:32:30
у меня ленивость в голове просто. я уже генератор помнящий значения key2 в голове нарисовал;)

Sergey
04.10.2016
17:33:05
трололо:)
не трололо, это реально понятный короткий код, здесь не нужно что-то большее городить

Google
Tatiana
04.10.2016
17:33:19
в смысле? когда понадобится, тогда и надо list делать
мне именно в этом месте на выходе и нужен список словарей

Zart
04.10.2016
17:34:15
удачный гольф - к срачу 8)

Tatiana
04.10.2016
17:34:33
да при желании срач можно из чего угодно родить

Roman
04.10.2016
17:47:43
def validate(self): if self.age < 18: raise CannotLegallyDrinkError

Zart
04.10.2016
17:49:14
давайте красить этот шалаш - от какого класса нужно унаследовать это исключение?

Sergey
04.10.2016
17:50:03
DrinkError для начала

Zart
04.10.2016
17:50:32
IOError vs ValueError

def validate(self): if self.age < 18: raise CannotLegallyDrinkError
а разве циферка не от локали зависит?

Dmitry
04.10.2016
17:53:40
Зависит

Zart
04.10.2016
17:58:14
(тонкое питерское исключение)

Roman
04.10.2016
18:00:08
мм... а посоветуйте орм для монги ))

Zart
04.10.2016
18:01:07
вроде был костыль-адаптер к СА

Dmitry
04.10.2016
18:01:38
мм... а посоветуйте орм для монги ))
там помню была какая-то прикольная приблуда

вроде даже кто-то из питера пилил..

Zart
04.10.2016
18:02:21
монгокит, монгоенджин

минг.. хз, ничо не пробовал из перечисленного

Serge
04.10.2016
19:12:39
Mnj?

Допиливать надо. @pragus помогай

Aleksander
05.10.2016
09:03:46
никто не натыкался на статейки про AI или ML в QA ? что-то маловато гугл выдает

Danil
05.10.2016
09:05:00
в QA?

Страница 157 из 785