我有一个SQLAlchemy KeyedTuple有几个字段。我希望得到一个元组(或者,如果可能的话,一个KeyedTuple),除了其中两个字段之外,还有其中的两个字段,我知道这个字段。
目前我有以下代码,通过排除“月”和“年”字段,从“行”KeyedTuple(使用中间“dictRow”dict,以及KeyedTuple的_asdict函数)生成“元组”列表:
values = []
dictRow = row._asdict()
for key in row.keys():
if key not in ("year", "month"):
print key, type(row), dictRow[key]
values.append (dictRow[key])
为了防止它变得很重要,上下文会产生一个查询结果,我真的需要排除某些字段,并获得剩下的字段。
答案 0 :(得分:1)
更好是非常主观的。但是如果你真的想要一个KeyedTuple
并保留原始的价值顺序,那么下面应该有效:
values = KeyedTuple(*zip(*(
(row[i], k) for i, k in enumerate(row.keys())
if not k in ("year", "month")
)))
# or, just simple tuple:
values = tuple(row[i] for i, k in enumerate(row.keys())
if not k in ("year", "month"))
为什么不直接从原始查询中排除这些列?