Заменить строку в списке списком строк с помощью словаря - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь заменить первую строку в следующем списке, используя последующий словарь, который сопоставляется со списком строк.

id_list = ['40000', '58962', '85496']
id_dict = {'10000': ['10001','10002','10003'], '40000': ['40001','40002','40003']}

Используя определенную функцию, например эту:

def find_replace_multi_ordered(string, dictionary):
    # sort keys by length, in reverse order
    for item in sorted(dictionary.keys(), key = len, reverse = True):
        string = re.sub(item, dictionary[item], string)
    return string

# Credit: http://pythoninthewyld.com/2018/03/12/dict-based-find-and-replace-deluxe/

В следующем примере для l oop:

for i in id_list:

    if id_list[0][-4:] == '0000':
        id_list.replace(find_replace_multi_ordered(i, id_dict))

    else:
        pass

print(id_list)

Это работает для преобразования словаря строки в строку, но приводит к ошибке TypeError для отображения строки в список.

Ошибка:

TypeError: unhashable type: 'list'

Желаемый результат будет следующим:

id_list = [['40001','40002','40003'], '58962', '85496']

Спасибо за любые рекомендации!

Ответы [ 2 ]

2 голосов
/ 29 мая 2020

Есть намного проще, или каждое значение в списке, если оно в dict, просто замените указанным значением, если оно отсутствует, сохраните значение

Подробности id_dict.get(item, item)

  • первый item - это ключ, на который нужно смотреть, чтобы получить значение
  • второй item - значение по умолчанию, если ключ не был найден
id_list = ['40000', '58962', '85496']
id_dict = {'10000': ['10001','10002','10003'], '40000': ['40001','40002','40003']}

id_list = [id_dict.get(item, item) for item in id_list]
print(id_list) # [['40001', '40002', '40003'], '58962', '85496']
0 голосов
/ 29 мая 2020

Он делает то, что вы хотите?

id_list = ['40000', '58962', '85496']
id_dict = {'10000': ['10001','10002','10003'], '40000': ['40001','40002','40003']}

X = [
    item if item not in id_dict else id_dict[item] for item in id_list
]
print(X) # [['40001', '40002', '40003'], '58962', '85496']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...