我有两组数据,一组来自django的queryset,它将返回如下数据:
sr_data = ShowroomConfigData.objects.only('location').filter(is_showroom=True).exclude(location='MajorSite')
for i in sr_data:
print i.location
London
Glasgow
Edinbrugh
...
第二组数据来自外部Mysql查询,该查询返回元组列表:
^{pr2}$esr_数据示例:
('John Smith', '0123456789', 'billy', 'London', 'London', datetime.date(2014, 12, 19), '0123456789', 'Bobs Builders', '123 place', 'city', 'add', 'London', 'LDN 103', ', '', '', ' ', '', '', ' ', ' ', ' ', ' ', '', ' ', '')
它们也不一定是那样的顺序,我想两者的顺序都是随机的。在
但是外部查询有一些我想定期导入django的细节。在
所以我需要循环这两个列表,并在它们匹配时将数据导入django,唯一的问题是,循环它们可能永远不会匹配。在
有没有人知道我能做这个的方法?在
谢谢
所以,据我所知,你有两个变量,它们都是不可解的。它们包含一些值,您希望在其中一个项与另一个项匹配时查找其中的项。
所以,一种天真的做法是:
但这并不是很好,因为它是
O(M * N)
,其中M是esr_数据的num,N是sr_数据的num你M和N很大吗?如果没有,这是可行的。
要降低大型数据的复杂性,请首先在以下两个位置找到共同的位置:
^{pr2}$这将复杂性降低到
O(L * L)
,其中L是公共元素的数目。读完其他答案后,我开始质疑自己的假设,认为实际的问题更多:
两个元组列表,根据特定字段查找两者中的行(例如:字段1、3和5都匹配)
基于这个问题,您可以从第一个列表构建一组“匹配的位”,然后从第二个列表中提取匹配该集合中任何内容的项,例如,基于每个元组中第一个和最后一个项目的以下筛选器:
我把我的原始答案写在下面,以防有用。
假设问题是:
一种选择是将元组列表转换成一组(冻结的)集合,然后简单地拉交集-即:两个集合中存在的所有集合。例如:
^{pr2}$看起来
esr_data
返回元素的元组,而不是元组的列表。所以你只需要比较相似元素的列表。您可以为此设置:
相关问题 更多 >
编程相关推荐