Как мне преобразовать список строк в dict, где ключами может стать только определенный тип с неизвестным индексом?

#python #list #dictionary

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

Вопрос:

У меня есть список строк, который выглядит следующим образом:

 myList = [
  "this 1 is my string",
  "a nice 2 string",
  "string is 3 so nice"
]
  

Я хотел бы преобразовать эту строку в a dict , которая также выглядит следующим образом:

 {
  "1": "this is my string",
  "2": "a nice string",
  "3": "string is so nice"
}
  

Я не знаю, как это сделать.

Ключом может стать только целое число, но все остальное должно стать значением, спасибо.

Ответ №1:

 import re

myDict = {}

for element in myList:
    # Find number using regex.
    key = re.findall(r'd ', element)[0]
    # Get index of number.
    index = element.index(key)
    # Create new string with index and trailing space removed.
    new_element = element[:index]   element[index   2:]
    # Add to dict.
    myDict[key] = new_element
  

Ответ №2:

Если у вас несколько чисел в строке, оно примет значение first number как key для dict ,

 >>> for line in myList:
...   match = re.search(r'd ',line)
...   if match:
...     num = match.group()
...     newline = line.partition(num) # control over the partition
...     newline = newline[0].strip()   ' '.join(newline[2:])
...     d[num] = newline
... 
>>> 
>>> d
{'1': 'this is my string', '3': 'string is so nice', '2': 'a nice string'}
  

Ответ №3:

Самый простой способ сделать это без установки каких-либо внешних зависимостей — использовать findall метод из re модуля.

 from re import findall

def list_to_dict(lst):
  result = {}
  for value in lst:
    match = findall(r"d", value)
    if len(match) > 0:
      result[match[0]] = value.replace(match[0], "").replace("  ", " ")
  return result
  

Если вы хотите, вы можете заменить 0 индекс другим индексом, хотя это следует делать только в том случае, если вы уверены, что знаете, где находится индекс целого числа.

Затем, используя ваш список:

 my_list = [
  "this 1 is my string",
  "a nice 2 string",
  "string is 3 so nice"
]
  

Вы бы вызвали функцию следующим образом:

 print(list_to_dict(my_list))
  

Что должно вывести это dict :

 {'1': 'this is my string', '2': 'a nice string', '3': 'string is so nice'}
  

Удачи.