2013-08-26 4 views
0

Я использую следующее выполнение запроса WMI на конечной точке Windows, которая возвращает результаты в списке. Я хочу преобразовать этот список в ключ словаря: значение, чтобы я мог искать все ключи с именем «Имя» в качестве имени, которое будет возвращено: «ASPNET» «Гость» «Администратор».Список, хранящийся в переменной, преобразованной в словари

import wmi_client_wrapper as wmi 

wmic = wmi.WmiClientWrapper(
username="corp.testdomain.com/Administrator", 
password="fakepassword", 
host="192.168.1.100", 
) 

output = wmic.query("Select * from Win32_UserAccount Where LocalAccount = True") 


{'Status': 'OK', 'Domain': 'localhost', 'Description': 'Account used for running the ASP.NET worker process (aspnet_wp.exe      )', 'InstallDate': None, 'Caption': 'localhost\\ASPNET', 'Disabled': False, 'PasswordChangeable': False, 'Lockout': False,      'AccountType': '512', 'SID': '45474748484848-1002', 'LocalAccount': True, 'FullName': 'ASP.NET Ma      chine Account', 'SIDType': '1', 'PasswordRequired': False, 'PasswordExpires': False, 'Name': 'ASPNET'} 
{'Status': 'Degraded', 'Domain': 'localhost', 'Description': 'Built-in account for guest access to the computer/domain', '      InstallDate': None, 'Caption': 'localhost\\Guest', 'Disabled': True, 'PasswordChangeable': False, 'Lockout': False, 'Accou      ntType': '512', 'SID': '3645747474747858-501', 'LocalAccount': True, 'FullName': '', 'SIDType': '1',      'PasswordRequired': False, 'PasswordExpires': False, 'Name': 'Guest'} 
{'Status': 'OK', 'Domain': 'localhost', 'Description': 'Built-in account for administering the computer/domain', 'InstallD      ate': None, 'Caption': 'localhost\\sol2112', 'Disabled': False, 'PasswordChangeable': True, 'Lockout': False, 'AccountType      ': '512', 'SID': '834668384636846843-500, 'LocalAccount': True, 'FullName': '', 'SIDType': '1', 'Pass      wordRequired': True, 'PasswordExpires': False, 'Name': 'Admin'} 
+0

Являются ли три словаря после 'output' списком результатов, которые являются содержимым вывода? – pcurry

+0

Я не уверен, что вы просите. Просьба предоставить образец одного или нескольких из этих «списков», которые вы хотите преобразовать в словарь, а также код, который вы пробовали. Вопросы, требующие кода, должны демонстрировать минимальное понимание решаемой проблемы. Включите попытки решения, почему они не работают и ожидаемые результаты. См. Также: [Контрольный список вопросов переполнения стека] (http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist) –

+0

pcurry, yes! .... –

ответ

0

вы можете просто сделать

>>> dict1 = {'Status': 'OK', 'Domain': 'localhost', 'Description': 'Account used for running the ASP.NET worker process (aspnet_wp.exe      )', 'InstallDate': None, 'Caption': 'localhost\\ASPNET', 'Disabled': False, 'PasswordChangeable': False, 'Lockout': False,      'AccountType': '512', 'SID': '45474748484848-1002', 'LocalAccount': True, 'FullName': 'ASP.NET Ma      chine Account', 'SIDType': '1', 'PasswordRequired': False, 'PasswordExpires': False, 'Name': 'ASPNET'} 
>>> print dict1['Name'] 
ASPNET 
0

Если структура output является:

[{'Status': 'OK', 'Domain': 'localhost', 'Description': 'Account used for running the ASP.NET worker process (aspnet_wp.exe      )', ..., 'Name': 'ASPNET'}, 
{'Status': 'Degraded', 'Domain': 'localhost', 'Description': 'Built-in account for guest access to the computer/domain', ..., 'Name': 'Guest'}, 
{'Status': 'OK', 'Domain': 'localhost', 'Description': 'Built-in account for administering the computer/domain', ..., 'Name': 'Admin'}] 

Я бы перебирать его в словарь списков, шпонкой ключами, которые в словарь:

output = wmic.query("Select * from Win32_UserAccount Where LocalAccount = True") 

new_dict = {} 
for key in output[0]: 
    new_dict[key] = [old_dict[key] for old_dict in output] 

Это также может быть сделано в одной строке с двумя списковых и dict встроенная:

new_dict = dict([(key, [old_dict[key] for old_dict in output]) 
       for key in output[0]]) 

И если у вас есть словарь постижений, вы можете использовать один из них:

new_dict = {key: [old_dict[key] for old_dict in output] 
      for key in output[0]} 

Каждый из этих предоставит словарь, который будет привязан к каждому из словарей результатов в output. Все значения в словарях в output присутствуют в списке по ключу, в котором они были найдены в их оригинальном словаре. Они находятся в том порядке, в котором они появились в output.

{'Status': ['OK', 'Degraded', 'OK'], 
'Domain': ['localhost', 'localhost', 'localhost'], 
'Description': ['Account used for running the ASP.NET worker process (aspnet_wp.exe)', 
       'Built-in account for guest access to the computer/domain', 
       'Built-in account for administering the computer/domain'], 
'InstallDate': [None, None, None], 
'Caption': ['localhost\\ASPNET', 'localhost\\Guest', 'localhost\\sol2112'], 
'Disabled': [False, True, False], 
'PasswordChangeable': [False, False, True], 
'Lockout': [False, False, False], 
'AccountType': ['512', '512', '512'], 
'SID': ['45474748484848-1002', 
     '3645747474747858-501', 
     '834668384636846843-500'], 
'LocalAccount': [True, True, True], 
'FullName': ['ASP.NET Machine Account', '', ''], 
'SIDType': ['1', '1', '1'], 
'PasswordRequired': [False, False, True], 
'PasswordExpires': [False, False, False], 
'Name': ['ASPNET', 'Guest', 'Admin']} 

 Смежные вопросы

  • Нет связанных вопросов^_^