从dict获得价值

时间:2013-05-12 13:27:06

标签: python dictionary

我是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']

感谢您的帮助,

2 个答案:

答案 0 :(得分:1)

问题是您没有创建dict,而是创建了list行,其中每个元素都是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


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

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

答案 1 :(得分:1)

你有一个词典列表,所以你要循环它们:

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

或访问单个项目:

print config_params[0]['hostname']

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

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