2017-12-07 5 views
0

I次のコードを持っている:がどのように関数内のpythonの辞書に追加する

コードは以下の形式で vmに対応付ける辞書 esxを作成することになっている
def main(): 
    content = si.RetrieveContent() 
    esx_vm = {} 
    search_index = si.content.searchIndex 
    for child in content.rootFolder.childEntity: 
     if hasattr(child, 'vmFolder'): 
     datacenter = child 
     vmFolder = datacenter.vmFolder 
     vmList = vmFolder.childEntity 

     for vm in vmList: 
      vmname = PrintVmInfo(vm) 
      if vmname is not None: 
       hostname = vmname 

       vm = si.content.searchIndex.FindByDnsName(None, hostname, True) 
       try : 
        ESX = vm.runtime.host.name 
       except : 
        pass 

    esx_vm.update({ESX:hostname}) 
    print(esx_vm) 


if __name__ == "__main__": 
    main() 

{'esx1': 'vm1'} 

しかし、 1つのキー値が{'esx1': 'vm1'}で、すべてのesx:vmマッピングが得られません。私は得ることを除いている:

{'esx1': 'vm1','esx2': 'vm2','esx3': 'vm3','esx4': 'vm4'} 

のように。

辞書の正しい値を取得する方法についてアドバイスしますか?

+0

Pythonはすべてインデントについてです。 'esx_vm.update({ESX:ホスト名})'行をインデントして内側のループ( 'vmList:'の 'for vm)で実行され、あなたはうまくいきます。 – hoefling

答えて

0

"forループ"内のESX値を更新したい場合があります。しかし、そのことが外に起こっていることは、その理由の一つである。 forループの一部としてESXキーを追加してください。これのようなもの(内部ループのため)、

try : 
    ESX = vm.runtime.host.name 
    esx_vm.update({ESX:hostname}) # Or, just, esx_vm[ESX]=hostname 
except : 
    pass 
関連する問題