如何在Python中动态填充字典?例如,假设我想创建一个包含表格式文本文件的数据的字典。假设我正在创建一个APR生成器,并且我有一个单独的特征列表,其中存储的某些数据如下(收入四舍五入到某个任意值):
Neighborhood Income Risk_Factor APR
Brighton 20000 10 .196
Allston 28500 3 .094
...
现在,我想用某个人的字典进行查找:
Herman Allston 25000 5
现在,我想查一下APR从词典中收取费用。它将通过以下方式进行检查:
apr_charge["Allston"][25000][5] = 0.125
如何动态创建此词典?如同,现在假设我有另一个保险档案,但现在我没有考虑收入。所以我用相同的代码填写相同类型的字典,但现在我有一个较少的嵌套字典键。这可能吗?我想创建嵌套字典,而不需要先了解嵌套的深度。
编辑: 我意识到可以使用数据库来存储这些信息。我想知道是否可以在不使用数据库的情况下处理这个问题。如果不可能,我需要一个可以存储到内存中的轻型数据库。 (依赖性头痛越少越好。我无法完全控制该程序将在其上运行的环境。)
答案 0 :(得分:4)
使用数据库。它比你想象的要容易。
sqlite将是一个不错的选择:
sqlite
附带Python以来,没有额外的依赖。以下是一些例子:
创建数据库表:
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方法。
要查找给定社区,收入和risk_factor的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)
答案 1 :(得分:2)
基本上,只需将字符串作为键,然后将值设置为您想要存储的任何其他值。
myDict = {}
for i in lines:
myDict[i[0]] = lines[1:-1]
这样,您只需使用
即可查看aprmyDict["Allston"][2]