Карта Python и лямбда-комбинация дают ошибку - PullRequest
0 голосов
/ 24 сентября 2019

Я пробую следующий рабочий код

from pyVmomi import vim
mapping = []
propertyDict = {'ipv4': '192.168.2.2/24'}
for k in propertyDict:
    v = propertyDict[k]
    mapping.append(vim.KeyValue(key=k, value=v))

с map и lambda , как показано ниже

mapping.append(map(lambda k: vim.KeyValue(key=k,value=propertyDict[k]), propertyDict))

, но получаю ошибку как Для "propertyMapping" ожидается тип vim.KeyValue, но получен список , когда я использовал его в отображении значения вследующая функция

if mapping:
    spec_params = vim.OvfManager.CreateImportSpecParams(entityName=vmname,
                                                         propertyMapping=mapping)

1 Ответ

1 голос
/ 24 сентября 2019

map функция возвращает итератор с несколькими значениями, а не с одним значением.

Вы должны заменить:

mapping.append(map(lambda k: vim.KeyValue(key=k,value=propertyDict[k]), propertyDict))

на:

mapping.extend(map(lambda k: vim.KeyValue(key=k,value=propertyDict[k]), propertyDict))

Более того, map редко используется в питоне.Мы предпочитаем список понимания.Я бы предложил:

mapping.extend(vim.KeyValue(key=k, value=v) for k,v in propertyDict.items())
...