从di获取值

2024-09-29 22:33:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python还不太熟悉,如果我的问题很愚蠢的话,我很抱歉。从一条sql语句中,我填写了以下语句:

config_params = [dict(
    hostname=row[0], syslocation=row[1],
    ipaddress=socket.inet_ntoa(struct.pack('!L', row[2])),
    netmask=socket.inet_ntoa(struct.pack('!L', row[3])),
    username=row[4], password=row[5], bri1=row[6], bri2=row[7],
    bri3=row[8], bri4=row[9]) for row in cur.fetchall()
]

现在我可以打印整个“配置参数”如下:

^{pr2}$

如何“仅”打印“hostname”中的值?它不适用于 打印配置参数['hostname']

谢谢你的帮助


Tags: configsql参数socketparams语句structdict
2条回答

您有一个字典列表,因此可以循环查看它们:

for param in config_params:
    print param['hostname']

或访问单个项目:

^{pr2}$

或者使用列表理解来提取主机名:

print [d['hostname'] for d in config_params]

问题是您没有创建dict,而是创建了list行,其中每个元素都是dict。在

所以,只打印第一行的hostname

print config_params[0]['hostname']

或者,要打印每行的主机名:

^{pr2}$

…或者,如果您愿意:

print '\n'.join(row['hostname'] for row in config_params)

同时,如果一开始只需要一行,只需使用fetchone而不是在fetchall上循环:

row = cur.fetchone()
config_params = dict(
    hostname=row[0], syslocation=row[1],
    ipaddress=socket.inet_ntoa(struct.pack('!L', row[2])),
    netmask=socket.inet_ntoa(struct.pack('!L', row[3])),
    username=row[4], password=row[5], bri1=row[6], bri2=row[7],
    bri3=row[8], bri4=row[9])

现在你得到了一个dict。在


还值得注意的是,许多数据库库为每一行提供了一种自动创建dict的方法,使用列名作为键,或者使用更高级的方法。例如,使用sqlite3

con = sqlite3.connect(dbpath, factory=sqlite3.Row)
cur = con.execute('SELECT * FROM Config')
config_params = cur.fetchone()
print config_params['hostname']

相关问题 更多 >

    热门问题