Произвольная замена элементов в словаре списков на основе другого списка - PullRequest
0 голосов
/ 27 апреля 2018

Это похоже на игру, но мне нужно это, чтобы оценить модель, над которой я работаю. Нужна помощь... У меня есть словарь со списками в качестве значений. Мне нужно заменить только один элемент в каждом списке в случайной позиции с элементом в my_list, но которого нет в списке. Затем мне нужно распечатать, какие буквы были поменяны местами предпочтительно в виде списка кортежей, показывающих каждый ключ из исходного словаря. Мой код пока не работает, как нужно ...:

my_list=[['a','b','c','d','e','q'],['f','j','k','l','m','n'],['o','p','r','s','t','k'], ['e','s','w','x','h','z']]
my_dict = {0:['a','d','f'], 1:['o','t','e'], 2:['m', 'j', 'k'],3:['d','z','f']}
all_letters = set(itertools.chain.from_iterable(my_list))

replace_index = np.random.randint(0,3,4)
print(replace_index)
dict_out = my_dict.copy()
replacements = []
for key, terms in enumerate(my_list):
    print(key)
    print(terms)
    other_letters = all_words.difference(terms)
    print(other_letters)
    replacement = np.random.choice(list(other_letters))
    print(replacement)
    replacements.append((terms[replace_index[key]], replacement))
    print(replacements)
    dict_out[replace_index[key]] = replacement
    print(dict_out)
print(replacements) # [(o,('a','c')...]

1 Ответ

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

Если я правильно понимаю, вы могли бы сделать что-то вроде этого:

import numpy as np

for i, k in enumerate(my_dict):
    # Pick a random element of your list in each key of my_dict:
    original = my_dict[k][np.random.randint(0, len(my_dict[i]))]
     # Pick a random element of the corresponding list, that is not in the my_dict key
    replacement = np.random.choice(list(set(my_list[i]) - set(my_dict[k])), 1)[0]
    # Replace the original for the replacement
    my_dict[k][my_dict[i].index(original)] = replacement
    # Print what was switched
    print((k,(original, replacement)))

Вывод:

(0, ('a', 'e'))
(1, ('t', 'm'))
(2, ('m', 't'))
(3, ('f', 'h'))

А ваш my_dict теперь выглядит так:

{0: ['e', 'd', 'f'], 1: ['o', 'm', 'e'], 2: ['t', 'j', 'k'], 3: ['d', 'z', 'h']}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...