Разделите буквенно-цифровое слово из списка и сохраните в качестве пары ключ-значение слова - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть список буквенно-цифровых данных,

my_list = ["A1B2244", "B3H7654", "A1O6541", "J4777"]

Мне нужно разделить каждое слово в форме слова, например

{"A1": ["B2244", "O6541"], "B3": ["H7654"], "J4": ["777"]}

Не могли бы вы дать мне знать, как проще всего это сделать?это на питоне.

Ответы [ 5 ]

0 голосов
/ 26 апреля 2018

Согласно вашему комментарию к вопросу, правило для разделения: разделить после первой цифры.Таким образом, вы можете искать индекс первой цифры, разбивать и добавлять к dict.Я проигнорировал ввод без цифр.

def first_index_of_digit(st):
    for i in range(len(st)):
        if st[i].isdigit():
            return i
    return -1

my_list = ["A1B2244", "B3H7654", "A1O6541", "J4777"]

dd = dict()

for item in my_list:
    i = first_index_of_digit(item)
    if (i == -1):
        continue
    k, v = item[:i+1], item[i+1:]

    if (dd.get(k, 0) == 0):
        dd[k] = list()
    dd[k].append(v)

print(dd)
# {'A1': ['B2244', 'O6541'], 'B3': ['H7654'], 'J4': ['777']}
0 голосов
/ 26 апреля 2018

Просто чтобы добавить к первому ответу Виллиана Виейры, я подумал, что было бы полезно узнать результат print(d) сразу после d= {i[:2]:[] for i in list}, а именно:

{'A1': [], 'B3': [], 'J4': []}

, только чтобы уточнить эту строкув двухстрочном решении.Просто чтобы посмотреть, как создаются ключи из первых двух символов в каждом элементе списка (без дублирования этих символов), а значения инициализируются как пустые списки.

0 голосов
/ 26 апреля 2018

Вы можете использовать itertools.groupby, чтобы сгруппировать элементы вашего списка на основе вашего состояния (первые два символа).Затем предоставьте результат в dict конструктор

>>> from itertools import groupby
>>> dict([(k,list(g)) for k,g in groupby(sorted(k),key=lambda x: x[:2])])
>>> {'J4': ['J4777'], 'A1': ['A1B2244', 'A1O6541'], 'B3': ['B3H7654']}
0 голосов
/ 26 апреля 2018
list = ['A1B2244', 'B3H7654', 'A1O6541', 'J4777']
#first initialize lists based 2 first elements
d= {i[:2]:[] for i in list}
#loop to add items by key
[d.get(i[:2]).append(i[2:]) for i in list]
print(d)

вывод:

{'A1': ['B2244', 'O6541'], 'J4': ['777'], 'B3': ['H7654']}
0 голосов
/ 26 апреля 2018
my_list = ['A1B2244', 'B3H7654', 'A1O6541', 'J4777']
my_dict={i[:2]:i[2:] for i in my_list}

Редактировать: Извините, я не заметил репликации в вашем выводе.У других есть короткие решения, но чистый питонический путь:

my_list = ['A1B2244', 'B3H7654', 'A1O6541', 'J4777']
my_dict={}
for i in my_list:
    if i[:2] in my_dict:
        my_dict[i[:2]].append(i[2:])
    else:
        my_dict[i[:2]]=[i[2:]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...