Предположим, у вас есть класс Table, который содержит атрибут: записи (список словарей) и ключи, которые являются первичным ключом каждой таблицы (как и SQL) - кортеж
Мне нужно написать Лямбда-функция, которая берет новую строку и затем выдает True или False, если все значения ключей в новой строке уже находятся в таблице
Например:
# Table: orders
keys = ('product_id', 'customer_id')
records: [{'product_id': 51, 'customer_id' : 10, 'units':9},
{'product_id': 32, 'customer_id' : 11, 'units':33},
{'product_id': 39, 'customer_id' : 47, 'units':2}]
и сейчас новая строка, которую мы хотим проверить:
{'product_id': 51, 'customer_id' : 10, 'units': 77 }
Это вернет True
, потому что product_id==51
и customer_id==10
точно так же, как первый словарь в записи (единицы измерения не имеют значения, потому что это не ключ).
Однако это:
{'product_id': 51, 'customer_id' : 11, 'units':9}
Вернет False
, потому что нет строк с product_id==51
и customer_id==11
Мы должны использовать лямбду функции (нам не нужно использовать фильтр, просто подсказка)
Я пробовал много разных способов «атаковать» этот вопрос, но я не мог перебрать список ключей и кортеж одновременно время ...
contains_key = lambda self, new_row: list(filter(
(lambda con: con[self.__key]),
[record for record in self.__records]
))
Объяснение: "Я" - это стол, за которым мы работаем В порядке, new_row - строка (словарь) для проверки
self .__ keys - кортеж ключей (как первичные ключи в sql), а self .__ records - список словарей = "" "строк в sql table "" ")
Функция находится внутри класса Table (поэтому она находится в форме" self ")
class Table:
def __init__(self, key_set):
self.__key = tuple(key_set)
self.__records = []
def add_record(self, new_record):
self.__records.append(new_record)