数据库查询出一组数据,如何查询降低匹配次数

2019-02-25 14:05:12 +08:00
 haoxuexiaoyao

需求如下: 两组数据: goods 数据是数据库查询出来的一组数据,

goods = Pay.query.filter_by(state=4).all()
good_ids = []
for good in goods:
	good_ids.append(good['id'])

b 数据是其他地方获取的数据:

b = {
	"t_id_1": {
		id = "1",
		name = 'name1'
	},
	"t_id_2": {
		id = "2",
		name = 'name2'
	},
	"t_id_3": {
		id = "3",
		name = 'name3'
	},
	"t_id_4": {
		id = "4",
		name = 'name4'
	},
	"t_id_5": {
		id = "5",
		name = 'name5'
	},
	"t_id_6": {
		id = "6",
		name = 'name6'
	},
	"t_id_7": {
		id = "7",
		name = 'name7'
	}
}

如果 goods_id 中有的 数字和 b 里面的 id 数字对应,输出 对应的 name,这个如何操作比较好啊,我的方式如下:

for item in b:
	for good_id in good_ids:
    	if good_id == b[item]['id']:
        	print(b[item]['name'])

请教下如何一次性比较后一次性输出打印结果比较好呢. 我的写法好啰嗦

2012 次点击
所在节点    Python
5 条回复
TanLeDeDaNong
2019-02-25 15:28:43 +08:00
一次循环就完成的事,需要这么复杂? b 的结构太迷了,不能提出来 id:name 吗?
bany
2019-02-25 15:31:57 +08:00
改用集合( set ),求一下交集?
redial39
2019-02-25 15:47:38 +08:00
x = dict(b)['t_id_{}'.format(id)].get('name',None) if dict(b).has_key(['t_id_{}'.format(id)]) else None

瞎写的,没审题
freakxx
2019-02-25 17:32:59 +08:00
good_ids = [good['id'] for good in goods]

names = [item["name"] for item in b.values() if item["id"] in good_ids]
haoxuexiaoyao
2019-02-26 00:08:11 +08:00
@freakxx 这个确实简化了不少 另外结合求交集

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/538460

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX