-1

我对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()
]

现在我可以像这样打印整个 'config_params':

print config_params

如何“仅”打印“主机名”中的值?它不适用于 print config_params['hostname']

感谢您的帮助,

4

2 回答 2

1

问题是您不是在创建 a dict,而是在创建 a listof 行,其中每个元素都是 a dict

所以,只打印hostname第一行:

print config_params[0]['hostname']

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

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

……或者,如果您愿意:

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.


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

con = sqlite3.connect(dbpath, factory=sqlite3.Row)
cur = con.execute('SELECT * FROM Config')
config_params = cur.fetchone()
print config_params['hostname']
于 2013-05-12T13:30:50.033 回答
1

你有一个字典列表,所以你会遍历它们:

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

或访问单个项目:

print config_params[0]['hostname']

或使用列表推导仅提取主机名:

print [d['hostname'] for d in config_params]
于 2013-05-12T13:31:19.457 回答