如何筛选WebSocket返回的嵌套列表:仅保留首索引匹配的子列表
嘿,我帮你搞定这个WebSocket数据筛选的问题!你需要从返回的嵌套/多层列表里,提取出那些子列表首个索引元素符合指定要求的项,对吧?下面是几个实用的处理方案,都是基于Python的(毕竟处理这类结构化数据用Python最顺手):
核心思路
说白了就是两步:遍历WebSocket返回的每一组顶级列表,然后对每个组里的子列表做判断,只保留那些首个索引(也就是子列表第0位元素)匹配你目标值的项。如果你的“首个索引”其实指的是子列表里的其他位置(比如示例里的第1位数字0/1),也可以直接调整判断逻辑就行,后面会讲。
1. 处理静态示例数据(先跑通逻辑)
先把你给的示例数据整理成可直接运行的格式:
ws_sample_data = [ [['o', 0, '9726.85438804', '0.40716427']], [['o', 0, '9909.02930523', '0.00000000'], ['o', 0, '9855.53483394', '12.07669000']], [['o', 0, '9669.50657753', '0.00000000'], ['o', 0, '9669.60657753', '0.30000000']], [['o', 1, '9660.00000000', '0.00000000'], ['o', 1, '9658.52360670', '0.00000000']] ]
比如你想筛选所有子列表第0位是'o'的项,用列表推导式就能快速实现:
# 定义你要匹配的目标值,这里是子列表首个元素为'o' target_value = 'o' filtered_result = [] # 遍历每一组数据 for group in ws_sample_data: # 筛选当前组里符合条件的子列表 matched_items = [sublist for sublist in group if sublist[0] == target_value] # 把结果合并到最终列表里 filtered_result.extend(matched_items) # 看看筛选后的结果 print(filtered_result)
运行后就会得到所有符合条件的子列表啦。
2. 实时处理WebSocket数据流
要是你是实时接收WebSocket消息(比如用websockets库),可以在收到消息的瞬间就处理:
import asyncio import websockets import json async def process_ws_data(): # 替换成你的WebSocket服务地址 ws_uri = "wss://your-websocket-server-url" # 这里假设你要匹配子列表首个元素为'o',可按需修改 target = 'o' async with websockets.connect(ws_uri) as websocket: while True: # 接收WebSocket消息 raw_message = await websocket.recv() # 把JSON字符串解析成列表(如果返回的是纯字符串格式,可能要调整解析方式) data = json.loads(raw_message) # 实时筛选符合条件的子列表 matched_sublists = [sublist for sublist in data if sublist[0] == target] # 这里可以换成你自己的业务逻辑,比如存储到数据库、推送前端等 print("实时筛选结果:", matched_sublists) # 启动异步任务 asyncio.run(process_ws_data())
3. 灵活调整匹配条件
如果你的需求不是匹配子列表第0位,而是其他索引(比如示例里的第1位数字0或1),只需要改判断条件里的索引就行。比如要提取子列表第1位是0的项:
target = 0 matched_sublists = [sublist for sublist in group if sublist[1] == target]
这样就能完全适配你的具体需求了。
内容的提问来源于stack exchange,提问作者swifty
相关产品推荐
相关产品推荐

