【发布时间】:2020-04-27 15:58:03
【问题描述】:
假设你有一个包含属性的类表: 记录(字典列表) 和作为每个表的主键的键(就像 SQL 一样) - 元组
我需要编写一个 lambda 函数,它接受一个新行,然后如果新行中键的所有值都吐出 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 的行
我们必须使用 lambda 函数(我们不必使用过滤器,只是一个提示)
我已经尝试了许多不同的“攻击”这个问题的方法,但我无法同时遍历键列表和元组......
contains_key = lambda self, new_row: list(filter(
(lambda con: con[self.__key]),
[record for record in self.__records]
))
解释:self 是我们对其进行操作的表,new_row 是要检查的行(字典)
self.__keys 是键的元组(如 sql 中的主键),self.__records 是字典列表="""sql 表中的行""")
该函数位于类 Table 中(这就是它采用“自我”形式的原因)
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)
【问题讨论】:
-
"需要写一个 lambda 函数" - 为什么?
-
做
x = lambda ...有点失去了lambdas的意义...... -
@HeapOverflow 这是大学的任务。我不知道你为什么要使用 lambdas 这么糟糕的方式,他们实际上在任务中说过(只是解释如何编写它)
-
我假设这是针对 CS 或编程课程的某种分配,这就是您尝试将其编写为 lambda 的原因。这实际上是普通 Python 编程中的一种反模式,您不应该将 lambda 分配给名称,在这种情况下,
def几乎总是更好。 -
@Grismar 正确,先生。 :)
标签: python python-3.x lambda