Найдите совпадение элемента между двумя списками, используя логическое значение, и создайте словарь - PullRequest
1 голос
/ 19 июня 2020

Мне нужно создать структуру данных для хранения имени хоста и количества этого конкретного устройства. В списке total_switches у меня есть функции для нескольких устройств, установленных в сети. В списке n3400_models есть модели семейства коммутаторов. Я делаю вид, что сопоставляю установленные функции коммутатора с моделями семейства коммутаторов, и при сопоставлении запускаю словарь, используя один из ключей: n34180yc,n3464c,n3432ds,n3408s и для значения список совпадающих имен хостов (h1,h2,h3,h4,h5,h6,h7,h8,h9) и суммы общего сопоставления для конкретной модели семейства коммутаторов.

код для python 3, который я использую, приведен ниже, но он не работает, так как он не создает список значений, т.е. {'n34180y c': ['h1', 'h5' , 'h9'] .....}

h1 = ("h1","20MB","16GB","1RU",12)
h2 = ("h2","22MB","16GB","2RU",22)
h3 = ("h3","70MB","-","1RU",12)
h4 = ("h4","70MB","-","4RU",22)
h5 = ("h5","20MB","16GB","1RU",12)
h6 = ("h6","22MB","16GB","2RU",22)
h7 = ("h7","70MB","-","1RU",12)
h8 = ("h8","70MB","-","4RU",22)
h9 = ("h9","20MB","16GB","1RU",12)

total_switches = [h1,h2,h3,h4,h5,h6,h7,h8,h9]

n34180yc = ('n34180yc','20MB','16GB','1RU')
n3464c = ('n3464c','22MB','16GB','2RU')
n3432ds = ('n3432ds','70MB','-','1RU')
n3408s = ('n3408s','70MB','-','4RU')

n3400_models = [n34180yc,n3464c,n3432ds,n3408s]

inventory = {}
for switch in n3400_models:
    for feature in total_switches:
        if switch[1:4] == feature[1:4]:
            inventory[switch[0]] = feature[0]

1 Ответ

0 голосов
/ 19 июня 2020

Вы можете сделать:

from itertools import groupby

inventory=dict([(k, list(v)) for k,v in groupby(sorted(total_switches,key=lambda x: x[1:4]), lambda x: x[1:4]) if k in n3400_models])

Вывод:

{('70MB', '-', '1RU'): [('h3', '70MB', '-', '1RU', 12), ('h7', '70MB', '-', '1RU', 12)], ('70MB', '-', '4RU'): [('h4', '70MB', '-', '4RU', 22), ('h8', '70MB', '-', '4RU', 22)]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...