Форум сайта python.su
Привет.
Есть ли в питоне функция позволяющая выбрать из словаря элементы по заданному условию, к примеру есть словарь
a = {"gear": {"stock1": {100}, "stock2": {101}, "stock3": {100}}, "engine": {"stock1": {100}}}
Офлайн
>> есть словарь из которого нужно взять элементы в которых одинаковый ключ “gear”
В словаре не может быть несколько элементов с одинаковым ключем. Поэтому ваш вопрос лише смысла, нужен элемен с ключем key, так берите его:
dict[key]
[code python][/code]
Офлайн
Более внятно это значит приведите код который вы написали.
Приведите пример в котором будут как включенные в вывод результаты так и не включенные.
Напишите что должно получиться и почему.
Постановка задачи - включить элементы отличающиеся не более чем на 1 процент неясна.
вот ряд чиcел. 1,2,3,4,5,6,7,8 Если надо привести набор чисел отличающихся не более чем на 1.5 что надо включать? 1,2 или 2,3 или 1,2,3 ?
Офлайн
PEHDOMНе может быть, но
В словаре не может быть несколько элементов с одинаковым ключем
for item in a for stock in item
a = {"gear": {"stock1": 100, "stock2": 101, "stock3": 100}, "engine": {"stock1": 100}} start_key = '' firth_value = 0 firth_stock = '' out = {} for item, values in a.items(): for stock, count in values.items(): if start_key != item or start_key == '': start_key = item firth_value = count firth_stock = stock elif start_key == item: if firth_value / count >= 1.01 or count / firth_value >= 1.01: out = {item: {firth_stock + '/' + stock, firth_value, count}} print(out)
Офлайн
izooomrudНасколько я понимаю русский язык такое допускает с трудом.
собрать значения между storeХ, где внешний ключ “gear”, которые отличаются между собой на 1%
izooomrudУ вас не получается потому что это вообще невозможно сделать. Нет такой математической операции сравнить между собой N элементов. Операция сравнения действует только на два элемента.
То как я пытаюсь это сделать не может сравнить все значения между собой
izooomrudЗачем вы его пытаетесь получить? Вам задали или вы сами это придумали?
А в итоге я пытаюсь получить такой словарь:
Отредактировано doza_and (Янв. 27, 2021 00:02:02)
Офлайн
doza_andНа самом деле, есть. Надо просто дать определение, определить множество-носитель и определить систему аксиом. Получится n-арная операция сравнения. Например, операция сложения на множестве целых чисел есть левая и есть правая. И это две разные операции сложения. Потом доказывается, что результаты этих операций равны и таким образом вводится коммутативность операции сложения на множестве целых чисел. То есть там две операции остались, просто принято говорить, что она там типа одна. А вот у матриц как раз можно посмотреть, как правое умножение не равно левому умножению, и поэтому операция умножения матриц не коммутативна, поэтому две операции умножения на множестве матриц никуда не делись, а результаты у них не равны. Соответственно, и операции бывают не только бинарные. Бинарные - это просто те, у которых n = 2, а n может быть и больше двух.
Нет такой математической операции сравнить между собой N элементов.
Отредактировано py.user.next (Янв. 27, 2021 02:50:38)
Офлайн
doza_andЯ его сам придумал. В общем, есть 3 склада с разными товарами, нужно выбрать из массива все однотипные товары имеющие отличие в их количестве между собой на заданный %. Как бы с применением mysql это не сложно сделать, но можно ли одними массивами?
Вам задали или вы сами это придумали?
Офлайн
Так значительно понятнее. Все равно программная реализация невозможна из за нечеткости постановки. А уточнение затруднено тем что непонятно какие действия вы хотите предпринять. Вы выравниваете число товаров по складам?
У вас путаются реальность - склады и виртуальность - массивы.
izooomrudТут непонятно. Это утверждение что на mysql не сложно или вопрос? По поводу массивов тоже вы о чем? у вас там исключительно словари.
Как бы с применением mysql это не сложно сделать, но можно ли одними массивами?
from collections import defaultdict delta =0.01 # имен складов нет - они не нужны для решения задачи # на каждом складе надо перечислить все товары sckladList =[{"a":5.5,"b":3,"c":0.},{"a":5.5,"b":8.,"c":4.}] # формируем списки количеств товаров на складах amo=defaultdict(list) for scklad in sckladList: for k,v in scklad.items(): amo[k].append(v) # выбираем имена товаров удовлетворяющих условию out = [k for k,v in amo.items() if 1-delta < (max(v)-min(v))/mean(v) < 1+delta]
Офлайн
doza_andЭто субъективное суждение, что к mysql это всего 1 запрос, что бы сформировать такой ответ.
Это утверждение что на mysql не сложно или вопрос?
doza_andНа сколько я понимаю, то словарь это и есть массив, только ассоциативный.
По поводу массивов тоже вы о чем? у вас там исключительно словари
a = {"gear": {"stock1": 100, "stock2": 101, "stock3": 100}, "engine": {"stock1": 100}} out = {} for item, values in a.items(): for stock, count in values.items(): for i, v in values.items(): if count / v >= 1.01: if item in out: out[item].append([i + '/' + stock, v, count]) else: out = {item: [i + '/' + stock, v, count]} print(out)
Офлайн
izooomrudНепонятно как вы дальше собираетесь использовать эти данные, выглядит сложно для дальнейших операций с данными в таком виде
А в итоге я пытаюсь получить такой словарь:
{“gear”: {0: {“stock1/stock2”, 100, 101}, 1: {“stock2/stock3”, 101, 100}}}
Онлайн