Как мне преобразовать список строк в dict, где ключами может стать только определенный тип с неизвестным индексом? - PullRequest
0 голосов
/ 13 апреля 2019

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

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

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

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

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

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

Ответы [ 3 ]

1 голос
/ 13 апреля 2019

Если вы набрали несколько чисел в строке, first number для 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'}
будет взято *1001*.
1 голос
/ 13 апреля 2019
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
0 голосов
/ 13 апреля 2019

Самый простой способ сделать это без установки каких-либо внешних зависимостей - использовать метод 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'}

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...