在python关联列表中有效查找元素

在python关联列表中有效查找元素,第1张

在python关联列表中有效查找元素

嗯,如果您被迫保留笨拙的数据结构,那就别指望了。与您的第一个解决方案类似的单行代码将是这样的:

def samplesof(requested_cond, conditions):    return next(s for c, s in conditions if c==requested_cond)

对于第二个,如果您坚持使用单线,它将类似于:

def ordered_union(the_conds, conditions):    return [s for c in the_conds for s in samplesof(c, conditions)]

有更快的方法可以解决第二个问题,但是它们都是多行的,例如:

aux_set = set(the_conds)samples_by_cond = dict((c, s) for c, s in conditions if c in aux_set)return [s for c in the_conds for s in samples_by_cond[c]]

注意,后一种方法更快的原因在于它使用了正确的数据结构(集合和字典)-不幸的是,它必须自己构建它们,因为传入的

conditions
嵌套列表实际上是错误的数据结构。

您难道不能只封装

conditions
一次构建关键(正确,快速)辅助数据结构的类的成员变量吗?例如:

class Sensible(object):  def __init__(self, conditions):    self.seq = []    self.dic = {}    for c, s in conditions:      self.seq.append(c)      self.dic[c] = s  def samplesof(self, requested_condition):    return self.dic[requested_condition]  def ordered_union(self, the_conds):    return [s for c in the_conds for s in self.dic[c]]

现在, 是快速和优雅!

我假设您需要

self.seq
其他条件(条件序列)(您提到的两个 *** 作肯定不需要!),并且该序列和示例中没有重复(无论您的实际规格是什么)将不会很难适应,但是当您一无所知时盲目地尝试猜测它们
是非常困难和毫无意义的;-)。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5674698.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存