
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:10
тут нужно в правильном порядке удалять
ведь если удалить из
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:35:22
тут нужно в правильном порядке удалять
ведь если удалить из
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'}]
кстати, да.

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

Roman
04.10.2016
13:36:45

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?

Serge
04.10.2016
14:30:32

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
Dmitry мне другой вариант предложил, но более громоздкий
спасибо еще раз! то, что надо :)

Serge
04.10.2016
17:02:01

Tatiana
04.10.2016
17:02:35

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
у меня маленький учебный проект

Sergey
04.10.2016
17:11:44

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

Serge
04.10.2016
17:33:31

Tatiana
04.10.2016
17:33:32

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

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?