Как добавить два списка регулярного выражения в виде пар dict ключ-значение

#python #list #dictionary

#python #Список #словарь

Вопрос:

Я извлекаю два значения регулярных выражений из файла, IP из str1 и ID из str2.

 str1 =   <IPAddress>12.1.1.2</IPAddress>
str2 =   <Id>202</Id>
                



import re
str1 = re.compile('<IPAddress>(d{1,3}.d{1,3}.d{1,3}.d{1,3})</IPAddress>')
str2 = re.compile('<Id>(d )</Id>')
regexList = [str2,str1]
file = open('ip_list.txt')
file = file.read()

for x in regexList:
    ID = x.findall(file)
    IP = x.findall(file)
  

Они оба вернули список из 100 элементов.

Как создать новый dict с идентификатором в качестве ключа и IP в качестве значения?

Каким бы способом я ни пытался использовать Google, например zip и т. Д., Я получаю результат в виде:

 ID = {'5988': '5988', '5989': '5989', '5982': '5982', '5983': '5983', '5980': '5980'}

IP = {'204.110.170.210': '204.110.170.210', '10.54.18.15': '10.54.18.15', '10.98.128.145': '10.98.128.145', '10.237.115.122': '10.237.115.122', '10.248.56.1': '10.248.56.1'}
  

Вместо:

  {5988:204.110.170.210,5989:10.54.18.15 ....respectively}
  

Пожалуйста, помогите

Комментарии:

1. можете ли вы указать, что именно хранится в str1 и str2 и как оно хранится?

2.@swathi — Вы действительно имеете в виду добавление к dict, а не создание нового dict?

Ответ №1:

просто перепишите свой код следующим образом:

 import re
str1 = re.compile('<IPAddress>(d{1,3}.d{1,3}.d{1,3}.d{1,3})</IPAddress>')
str2 = re.compile('<Id>(d )</Id>')
regexList = [str2, str1]
file = open('ip_list.txt')
file = file.read()

ID = str2.findall(file)
IP = str1.findall(file)
Your_target_Dictionary = dict(zip(ID, IP))

print(Your_target_Dictionary )
  

Ответ №2:

Я надеюсь, что этот небольшой пример поможет вам достичь желаемого результата:

Предполагая, что str1 и str2 содержат строки ‘12345’ и ‘abcde’ соответственно,

 str1 = '12345'
str2 = 'abcde'
  

Преобразовать их в список, каждая буква которого является элементом списка:

 str1= list(str1)
str2= list(str2)
  

Теперь str1= [‘1’, ‘2’, ‘3’, ‘4’, ‘5’] и str2 = [‘a’, ‘b’, ‘c’, ‘d’, ‘e’]

Следующим шагом будет перебор любого из списков, создание пустого словаря и аналогичное заполнение словаря:

 dictionary={}
for i in range(len(str1)):
    dictionary[str1[i]] = str2[i]
    
print(dictionary)
  

даст следующий результат:
{‘1’: ‘a’, ‘2’: ‘b’, ‘3’: ‘c’, ‘4’: ‘d’, ‘5’: ‘e’}

Комментарии:

1. Попробуйте dictionary[str2[i]] = str1[i], это позволяет идентификаторам быть ключом по индексу, а IP-адреса хранятся в str1 в качестве их значений

Ответ №3:

Для создания нового dict с ключами ID и значениями IP , как в списках:

 new_dict = dict(zip(ID, IP))
  

Для добавления ключей ID и значений IP к существующему dict:

 existing_dict.update(zip(ID, IP))