Я работаю над динамическим созданием словаря из таблицы базы данных. hosts_list
- это список имен хостов, которые я выбрал из столбца host_names
в таблице hosts
. Когда у меня есть список имен хостов, я создаю словарь с каждым именем хоста в качестве ключа, инициализированным пустым значением. Значения в host_dict устанавливаются через вложенное понимание словаря той же таблицы.Вложенный словарь возвращает set()?
engine = create_engine('postgresql+psycopg2://postgres:[email protected]:5432/cm', convert_unicode=True)
metadata = MetaData(bind=engine)
db = engine.connect()
hosts = Table('hosts', metadata, autoload=True)
results = db.execute(select({hosts}))
hosts_list =[]
for x in results:
hosts_list.append(x[hosts.c.host_name])
hosts_dict = dict.fromkeys(hosts_list)
for key, value in hosts_dict.items():
hosts_dict[key] = {
{column : value for column,value in x.items()}
for x in results}
Вот данные теста я использую (отформатирован для удобства чтения):
Colums: hosts_id,host_uuid,host_name,host_ip,host_os,host_active
Row: 4; "35968946-2db0-4f85-b764-14c27ab3a57c";"test-04";"192.168.1.4";"RHEL 6.x";FALSE
Вот что моя конечная цель (отформатированные для читаемости):
{
'test-01': {
'hosts_id':'1',
'host_uuid':'a5c52229-34e5-4f54-a7da-b39149dedc13',
'host_name':'test-01',
'host_os':'Ubuntu 14.04',
'host_active':'True'},
'test-04': {
'hosts_id':'4'
'host_uuid':'35968946-2db0-4f85-b764-14c27ab3a57c'
'host_name':'test-04'
'host_ip':'192.168.1.4'
'host_os':'RHEL 6.6'
'host_active':'False'},
'test-03': {...},
'test-02': {...}
}
Здесь приведены r esults Я фактически получаю:
print(hosts_dict)
{'test-01': set(), 'test-04': set(), 'test-03': set(), 'test-02': set()}
Я не уверен, что это значит. Я прочитал документацию на set()
, но я не совсем понимаю. С [[print("'{0}':'{1}'".format(column,value)) for column, value in v.items()] for v in results]
я могу получить печать столбца и его значение в каждой строке, как это:
'hosts_id':'1'
'host_uuid':'a5c52229-34e5-4f54-a7da-b39149dedc13'
'host_name':'test-01'
'host_ip':'192.168.1.1'
'host_os':'Ubuntu 14.04'
'host_active':'True'
...
Как я могу пойти от того, что у меня есть на то, что моя конечная цель?
Не выполняйте [перекрестные помехи] (http://programmers.stackexchange.com/q/287881/110531). Также ваш вопрос неясен; что вы не понимаете о 'set'? Обратите внимание, что понимание набора '{x for x in y}' очень похоже на понимание словаря '{x: y для x, y в z}' ... – jonrsharpe
Это сообщение о том, как решить проблемы, а другое post спрашивает, что 'set()' на самом деле, потому что я этого не понимаю. – mxplusb
Ну, ваша первая проблема в том, что это не совсем понятно. Это очень сложный вопрос о программистах для * «что такое' set'? »*, И все же не объясняет, что вы прочитали, что вы узнали и что вы все еще хотите знать. Между тем этот вопрос далеко от минимального примера (http://stackoverflow.com/help/mcve). Пожалуйста, прочитайте [ask] для обоих сайтов и уточните свои точные вопросы. – jonrsharpe