У меня есть словарь, который связывает людей с их навыками:
d = {
'A': {'name': 'Peter', 'skill': 'python'},
'B': {'name': 'Mary', 'skill': 'c#'},
'C': {'name': 'James', 'skill': 'java'}
}
У меня есть список, в котором указаны необходимые навыки для различных заданий:
e = [
['python', 'java'],
['c#', 'R']
]
Мне нужно создать новый список с именами людей, которые имеют запрошенный навык (или 'N / A', если ничего не найдено) В этом случае результат будет:
rslt= [['Peter', 'James'], ['Mary', 'N/A']]
Следующие for-l oop (s) генерируют результат.
# with for loops
for r in range(len(e)):
for s in range(0,len(e[r])):
skill_found = 'false'
for k in d.keys():
if e[r][s] == d[k]['skill']:
rslt[r][s] = d[k]['name']
skill_found = 'true'
break
if skill_found == 'false':
rslt[r][s] = 'N/A'
print(rslt)
Однако я бы очень хотел получить некоторое понимание списка / словаря, чтобы сделать то же самое, в котором я постоянно терпел неудачу. Следующие два оператора создают мусор:
#with list/dict comprehension
lstComp1 = [[d[k]['name'] if str(e[y][x]) == d[k]['skill'] else 'N/A' for x in range(0, len(e[y])) for k in d.keys()] for y in range(len(e))]
lstComp2 = [[x if x in d else 'N/A' for x in range(len(e[y]))] for y in range(len(e))]
print( lstComp1)
print(lstComp2)
Любая помощь будет наиболее ценной.