データベースを使用します。思ったより簡単です。
sqliteは良い選択です:
sqlite
Python が付属しているため、余分な依存関係はありません。
- データベースを使用すると、ネストされた辞書よりも柔軟なクエリに簡単にアクセスできます。たとえば、risk_factor が 8 を超える近隣地域はどれかを尋ねることができます。または、どの (近隣、収入、リスク係数) タプルが APR < 0.10 であるか。
- データはファイルに保存され、Python 以外の言語で記述されたプログラムであっても、他のプログラムで読み取ることができる形式になっている可能性があります。
- 多くのユーザーが同時にデータベースを読み書きしようとしない限り、このタスクには sqlite で十分満足できるはずです。
- sqlite3 データベース アダプターには優れたドキュメントがあり、 Python データベース API 仕様 v2.0に準拠しています。
- SQLite が理解する SQL 言語には優れたドキュメントがあります。
ここではいくつかの例を示します。
データベース表を作成するには:
import sqlite3
with sqlite3.connect('apr.sqlite') as connection:
cursor = connection.cursor()
cursor.execute('''CREATE TABLE aprtable
(id INTEGER PRIMARY KEY AUTOINCREMENT,
neighborhood TEXT,
income INTEGER,
risk_factor INTEGER,
apr FLOAT)''')
または、メモリ内のみにデータベースを作成するには、次のようにします。
with sqlite3.connect(':memory:') as connection:
....
表にデータを挿入するには:
sql = 'INSERT INTO aprtable (neighborhood, income, risk_factor, apr) value (?,?,?,?)'
args = ['Brighton', 20000, 10, 0.196]
cursor.execute(sql, args)
executemanyメソッドもチェックしてください。
近所、収入、およびリスク係数を指定して apr を見つけるには、次のようにします。
sql = 'SELECT apr FROM aprtable WHERE neighborhood = ? and income = ? and risk_factor = ?'
args = ['Allston', 25000, 5]
cursor.execute(sql, args)
row = cur.fetchone()
if row is not None:
apr = row[0]
近隣、収入、およびリスク係数を指定して apr を変更するには:
sql = 'UPDATE aprtable SET apr = ? WHERE neighborhood = ? and income = ? and risk_factor = ?'
args = [0.125, 'Allston', 25000, 5]
cursor.execute(sql, args)
risk_factor > 8 を持つ近隣を見つけるには、次のようにします。
sql = 'SELECT neighborhoods from aprtable where risk_factor > ?'
args = [8]
cursor.execute(sql, args)
neighborhoods = cur.fetchall()
APR < 0.10 である (近隣、収入、リスク係数) を見つけるには、次のようにします。
sql = 'SELECT neighborhood, income, risk_factor FROM aprtable WHERE apr < ?'
args = [0.10]
cursor.execute(sql, args)
for neighborhood, income, risk_factor in cursor:
print(neighborhood, income, risk_factor)