Python 正在向后打印一个列表,但不打印其他列表
Python is printing one list backwards but not the others
我正在使用带有 MySQL 后端的 Django 1.8。我需要从数据库中的几个 table 中获取两列并将它们连接起来,然后将排序后的结果放在网页上。到目前为止我有这个:
views.py
def herps(request):
#performs queries to get distinct species from the database
trQuery = queryBuilder(HetrRec, '_hetr')
opQuery = queryBuilder(HeopRec, '_heop')
valList = opQuery + trQuery
query = sorted(set(valList))
return render_to_response('herps.html', {'queries': query,})
对数据库执行查询的函数如下所示:
def queryBuilder(table, column_str):
genus = 'genus' + column_str
species = 'species' + column_str
filterSp = {species: 'sp.'}
query = table.objects.order_by(species, genus).values(genus, species).distinct().exclude(**filterSp)
valueList = []
for q in query:
species = ' '.join(q.values())
valueList.append(species)
return(valueList)
因此,输出以几种 table 组合形式出现,作为属种。在一个 table 中出现了 Species Genus。
我已经检查过数据以删除可能影响它的任何字符(前导/尾随空格、不完整的对等),但没有任何乐趣。
正如文档中所说的那样,不是 return 字典(那是 table 的字典),而是 return 一个值的选项列表。结果是正确的,所以 queryBuilder() 函数是这样工作的:
views.py
def queryBuilder(table, column_str):
genus = 'genus_' + column_str
species = 'species_' + column_str
filterSp = {species: 'sp.'}
query = table.objects.values_list(genus, species).distinct().exclude(**filterSp)
valueList = []
for q in sorted(query):
species = ' '.join(q)
valueList.append(species)
return(valueList)
我仍然不知道为什么上一个查询的结果是错误的table,这很烦人。
我会将代码缩短到很可能是问题的特定部分:
query = table.objects.values(genus, species)
valueList = []
for q in query:
species = ' '.join(q.values())
valueList.append(species)
如您在文档中所读,values()
将 return 字典列表,如下所示:
[{'genus_hetr': 'foogenus', 'species_hetr': 'foospecie'},
{'genus_hetr': 'bargenus', 'species_hetr': 'barspecie'}]
然后您将遍历该列表。在每次迭代中,q
是字典之一。到目前为止,一切都很好。那么,问题:
' '.join(q.values())
字典没有排序。所以这会加入所有值,但顺序是任意的。即使是那些 table 你认为正在工作的人也会在稍后随机崩溃。
那怎么解决呢?好吧,就像您所做的那样,使用有序的 values_list
returns 个元组。另一种选择是不依赖顺序,而是使用字典本身,即按键寻址:
species = '%s %s' % (q[genus], q[species])
顺便说一句,对于这种简单的情况,您可能希望使用列表理解。整个循环可以这样写:
valuesList = ['%s %s' % (q[genus], q[species]) for q in query]
我正在使用带有 MySQL 后端的 Django 1.8。我需要从数据库中的几个 table 中获取两列并将它们连接起来,然后将排序后的结果放在网页上。到目前为止我有这个:
views.py
def herps(request):
#performs queries to get distinct species from the database
trQuery = queryBuilder(HetrRec, '_hetr')
opQuery = queryBuilder(HeopRec, '_heop')
valList = opQuery + trQuery
query = sorted(set(valList))
return render_to_response('herps.html', {'queries': query,})
对数据库执行查询的函数如下所示:
def queryBuilder(table, column_str):
genus = 'genus' + column_str
species = 'species' + column_str
filterSp = {species: 'sp.'}
query = table.objects.order_by(species, genus).values(genus, species).distinct().exclude(**filterSp)
valueList = []
for q in query:
species = ' '.join(q.values())
valueList.append(species)
return(valueList)
因此,输出以几种 table 组合形式出现,作为属种。在一个 table 中出现了 Species Genus。
我已经检查过数据以删除可能影响它的任何字符(前导/尾随空格、不完整的对等),但没有任何乐趣。
正如文档中所说的那样,不是 return 字典(那是 table 的字典),而是 return 一个值的选项列表。结果是正确的,所以 queryBuilder() 函数是这样工作的:
views.py
def queryBuilder(table, column_str):
genus = 'genus_' + column_str
species = 'species_' + column_str
filterSp = {species: 'sp.'}
query = table.objects.values_list(genus, species).distinct().exclude(**filterSp)
valueList = []
for q in sorted(query):
species = ' '.join(q)
valueList.append(species)
return(valueList)
我仍然不知道为什么上一个查询的结果是错误的table,这很烦人。
我会将代码缩短到很可能是问题的特定部分:
query = table.objects.values(genus, species)
valueList = []
for q in query:
species = ' '.join(q.values())
valueList.append(species)
如您在文档中所读,values()
将 return 字典列表,如下所示:
[{'genus_hetr': 'foogenus', 'species_hetr': 'foospecie'},
{'genus_hetr': 'bargenus', 'species_hetr': 'barspecie'}]
然后您将遍历该列表。在每次迭代中,q
是字典之一。到目前为止,一切都很好。那么,问题:
' '.join(q.values())
字典没有排序。所以这会加入所有值,但顺序是任意的。即使是那些 table 你认为正在工作的人也会在稍后随机崩溃。
那怎么解决呢?好吧,就像您所做的那样,使用有序的 values_list
returns 个元组。另一种选择是不依赖顺序,而是使用字典本身,即按键寻址:
species = '%s %s' % (q[genus], q[species])
顺便说一句,对于这种简单的情况,您可能希望使用列表理解。整个循环可以这样写:
valuesList = ['%s %s' % (q[genus], q[species]) for q in query]