Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按外键计数和排序,但使用另一列_Python_Sqlalchemy - Fatal编程技术网

Python 按外键计数和排序,但使用另一列

Python 按外键计数和排序,但使用另一列,python,sqlalchemy,Python,Sqlalchemy,我有两张桌子 class tbl_vocabulary(db.Model): id = db.Column(db.Integer, primary_key=True) word = db.Column(db.String(32), index=True) gram_term_id = db.Column(db.Integer, db.ForeignKey('tbl_grammatical_term.id')) class tbl_grammatical_term(db.

我有两张桌子

class tbl_vocabulary(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    word = db.Column(db.String(32), index=True)
    gram_term_id = db.Column(db.Integer, db.ForeignKey('tbl_grammatical_term.id'))

class tbl_grammatical_term(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    short_name = db.Column(db.String(16))
这是一个简单的1:N关系,一个语法术语可以属于许多词汇条目。我想得到词汇表中有多少名词、动词等

我可以通过下面的查询得到这个

tbl_vocabulary.query.with_entities(tbl_grammatical_term.short_name, tbl_vocabulary.gram_term_id, func.count(tbl_grammatical_term.short_name)).outerjoin(tbl_grammatical_term).group_by(tbl_grammatical_term.short_name).all()
所以我得到一个嵌套列表,如下所示:

[('ADV', 1, 15), ('N', 13, 137), ('V', 9, 48)]
其中包含以下信息:

[(tbl_grammatical_term.short_name, tbl_vocabulary.gram_term_id, count)]

那么,我如何才能摆脱tbl\U词汇表。gram\u term\u id?

如果您需要一个快速而肮脏的解决方案,仅从结果中提取短名称和计数,您可以使用列表理解:

a=[('ADV',1,15),('N',13,137),('V',9,48)]
b=[(x,z)表示a中的(x,uz)]
b
将保存以下值:

[('ADV',15),('N',137),('V',48)]

如果列表很小,则在列表理解中再次迭代,只需获取所需字段。
\uu
通常被接受为需要解包但不需要的数据的占位符。因此,
b=[(x,y)对于a中的(x,uu,y)]
对于未来的维护者来说可能更清晰。我根据@ac24发布的评论编辑了我的原始回复。