本文目录导读:

我来详细介绍Python实现精准查询的几种常用方法,并附上完整的示例代码。
基础精准查询(精确匹配)
# 示例1:列表精准查询
def exact_search_list(data, target):
"""在列表中精准查找元素"""
try:
index = data.index(target)
return f"找到元素 '{target}',索引位置:{index}"
except ValueError:
return f"未找到元素 '{target}'"
# 使用示例
my_list = ['apple', 'banana', 'orange', 'grape']
print(exact_search_list(my_list, 'banana')) # 找到
print(exact_search_list(my_list, 'watermelon')) # 未找到
# 示例2:字典精准查询
def exact_search_dict(data, key):
"""在字典中精准查找键"""
if key in data:
return f"找到键 '{key}',对应的值:{data[key]}"
else:
return f"未找到键 '{key}'"
# 使用示例
my_dict = {'name': '张三', 'age': 25, 'city': '北京'}
print(exact_search_dict(my_dict, 'name'))
print(exact_search_dict(my_dict, 'gender'))
数据库精准查询
import sqlite3
class DatabaseSearch:
def __init__(self, db_name='example.db'):
self.conn = sqlite3.connect(db_name)
self.cursor = self.conn.cursor()
self.create_table()
def create_table(self):
"""创建示例表"""
self.cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
email TEXT UNIQUE,
age INTEGER
)
''')
# 插入示例数据
sample_data = [
(1, '张三', 'zhangsan@example.com', 25),
(2, '李四', 'lisi@example.com', 30),
(3, '王五', 'wangwu@example.com', 28)
]
self.cursor.executemany('INSERT OR IGNORE INTO users VALUES (?,?,?,?)', sample_data)
self.conn.commit()
def exact_search_by_name(self, name):
"""按姓名精准查询"""
sql = "SELECT * FROM users WHERE name = ?"
self.cursor.execute(sql, (name,))
result = self.cursor.fetchone()
return result if result else f"未找到姓名为 '{name}' 的用户"
def exact_search_by_email(self, email):
"""按邮箱精准查询"""
sql = "SELECT * FROM users WHERE email = ?"
self.cursor.execute(sql, (email,))
result = self.cursor.fetchone()
return result if result else f"未找到邮箱为 '{email}' 的用户"
def close(self):
self.conn.close()
# 使用示例
db = DatabaseSearch()
print(db.exact_search_by_name('张三'))
print(db.exact_search_by_email('lisi@example.com'))
db.close()
精准查询
import json
import csv
class FileSearch:
@staticmethod
def search_json_exact(file_path, key, value):
"""在JSON文件中精准查询"""
with open(file_path, 'r', encoding='utf-8') as f:
data = json.load(f)
results = []
for item in data:
if item.get(key) == value:
results.append(item)
return results if results else f"未找到 '{key}={value}' 的匹配项"
@staticmethod
def search_csv_exact(file_path, column_index, value):
"""在CSV文件中精准查询"""
with open(file_path, 'r', encoding='utf-8') as f:
reader = csv.reader(f)
header = next(reader) # 跳过表头
results = []
for row in reader:
if len(row) > column_index and row[column_index] == value:
results.append(row)
return results if results else f"未找到匹配项"
# 创建示例JSON文件
sample_data = [
{"id": 1, "name": "产品A", "price": 100},
{"id": 2, "name": "产品B", "price": 200},
{"id": 3, "name": "产品C", "price": 100}
]
with open('products.json', 'w', encoding='utf-8') as f:
json.dump(sample_data, f, ensure_ascii=False)
# 使用示例
file_search = FileSearch()
results = file_search.search_json_exact('products.json', 'price', 100)
print(f"价格100的产品:{results}")
带索引优化的精准查询
class IndexedSearch:
def __init__(self):
self.data = []
self.index = {} # 索引字典
def add_data(self, items, key_field):
"""添加数据并建立索引"""
for item in items:
self.data.append(item)
key = item[key_field]
if key not in self.index:
self.index[key] = []
self.index[key].append(len(self.data) - 1)
def exact_search_with_index(self, key):
"""使用索引进行精准查询"""
if key in self.index:
indices = self.index[key]
return [self.data[i] for i in indices]
else:
return f"未找到键 '{key}'"
def exact_search_without_index(self, key_field, value):
"""不使用索引的线性搜索(对比)"""
results = []
for item in self.data:
if item[key_field] == value:
results.append(item)
return results if results else "未找到匹配项"
# 使用示例
searcher = IndexedSearch()
# 添加大量数据
dataset = [
{"id": i, "name": f"用户{i}", "age": 20 + (i % 30)}
for i in range(1, 10001)
]
# 按名称索引
searcher.add_data(dataset, "name")
# 精准查询
result_index = searcher.exact_search_with_index("用户5000")
result_linear = searcher.exact_search_without_index("name", "用户5000")
print(f"索引查询结果:{result_index}")
print(f"线性查询结果:{result_linear}")
模糊匹配与严格精准查询结合
import re
class AdvancedSearch:
@staticmethod
def strict_exact_search(text, keyword):
"""严格精准匹配(完全相等)"""
return text == keyword
@staticmethod
def word_exact_search(text, keyword):
"""单词精准匹配(考虑单词边界)"""
pattern = r'\b' + re.escape(keyword) + r'\b'
return bool(re.search(pattern, text))
@staticmethod
def case_sensitive_search(text, keyword):
"""大小写敏感精准匹配"""
return keyword in text
@staticmethod
def case_insensitive_search(text, keyword):
"""大小写不敏感精准匹配"""
return keyword.lower() in text.lower()
@staticmethod
def search_in_list(data, keyword, exact=True):
"""在列表中执行不同类型的精准查询"""
if exact:
# 完全精准匹配
return [item for item in data if item == keyword]
else:
# 包含匹配(但要求精准包含)
return [item for item in data if keyword in str(item)]
# 使用示例
text = "Python是一种优秀的编程语言"
searcher = AdvancedSearch()
print(searcher.strict_exact_search(text, "Python")) # False(文本不完全等于"Python")
print(searcher.word_exact_search(text, "Python")) # True("Python"作为一个单词存在)
print(searcher.case_sensitive_search(text, "python")) # False(大小写不匹配)
print(searcher.case_insensitive_search(text, "python")) # True(忽略大小写)
综合示例:图书管理系统精准查询
class BookSearchSystem:
def __init__(self):
self.books = []
self.isbn_index = {} # ISBN索引
self.title_index = {} # 书名索引
def add_book(self, book):
"""添加图书并建立索引"""
self.books.append(book)
isbn = book['isbn']
title = book['title']
# ISBN索引(精准匹配)
self.isbn_index[isbn] = len(self.books) - 1
# 书名索引(首字母,用于快速定位)
first_char = title[0] if title else ''
if first_char not in self.title_index:
self.title_index[first_char] = []
self.title_index[first_char].append(len(self.books) - 1)
def search_by_isbn(self, isbn):
"""按ISBN精准查询"""
if isbn in self.isbn_index:
index = self.isbn_index[isbn]
return self.books[index]
return f"未找到ISBN为 '{isbn}' 的图书"
def search_by_title_exact(self, title):
"""按书名精准查询"""
results = []
first_char = title[0] if title else ''
if first_char in self.title_index:
for index in self.title_index[first_char]:
if self.books[index]['title'] == title:
results.append(self.books[index])
return results if results else f"未找到书名为 '{title}' 的图书"
def search_by_author_and_year(self, author, year):
"""按作者和年份精准查询"""
results = []
for book in self.books:
if (book['author'] == author and
book['year'] == year):
results.append(book)
return results if results else f"未找到作者为'{author}'、年份为{year}的图书"
# 使用示例
book_system = BookSearchSystem()
# 添加示例图书
books_data = [
{"isbn": "978-7-111-54760-4", "title": "Python编程", "author": "张三", "year": 2023},
{"isbn": "978-7-111-54760-5", "title": "Java编程", "author": "李四", "year": 2022},
{"isbn": "978-7-111-54760-6", "title": "Python高级编程", "author": "张三", "year": 2023}
]
for book in books_data:
book_system.add_book(book)
# 执行精准查询
print(book_system.search_by_isbn("978-7-111-54760-4"))
print(book_system.search_by_title_exact("Python编程"))
print(book_system.search_by_author_and_year("张三", 2023))
性能对比和最佳实践
import time
import random
def performance_comparison():
"""对比不同查询方法的性能"""
# 生成测试数据
data_size = 100000
test_data = [f"item_{i}" for i in range(data_size)]
# 创建索引
index = {item: i for i, item in enumerate(test_data)}
# 测试查询
search_items = ["item_0", "item_50000", "item_99999", "not_exist"]
for item in search_items:
print(f"\n查询 '{item}':")
# 1. 列表线性搜索
start = time.time()
result = item in test_data
linear_time = time.time() - start
print(f" 线性搜索: {linear_time:.6f}秒")
# 2. 字典索引搜索
start = time.time()
result = item in index
index_time = time.time() - start
print(f" 索引搜索: {index_time:.6f}秒")
# 3. set搜索
start = time.time()
test_set = set(test_data)
result = item in test_set
set_time = time.time() - start
print(f" Set搜索: {set_time:.6f}秒")
# 运行性能对比
performance_comparison()
精准查询的最佳实践建议
- 使用合适的数据结构:对于频繁查询,考虑使用字典或集合
- 建立索引:大数据集时建立索引可以大幅提升性能
- 注意边界情况:处理空值、特殊字符、编码问题
- 考虑使用数据库:复杂查询需求时使用数据库管理系统
- 缓存查询结果:对于重复查询,考虑缓存结果
- 注意内存使用:索引会消耗额外内存,需要权衡
这些示例涵盖了Python实现精准查询的多种场景,你可以根据实际需求选择合适的方法。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播