Отдельные значения ключа в словаре и воссоздание dict после обработки значений - PullRequest
0 голосов
/ 03 ноября 2018

У меня есть большой словарь, подобный этому:

{'T096': ['AABBAACACCAADBAACCAAAACACCBBAE'],
'T122': ['AACAABBBCABBDAACABCACABBAAACCCCAE'],
'T154': ['ABAABDBAAACCCAE'],
'T169': ['CCDBAACCAAAACCAE'],
'T176': ['BDACACCAAAACCCCAE'],
'T183': ['BBAACAACCBDAACBACCCCAAAACCAE'],
'T197': ['AABBAACABABACABAAABDBAAACCAE'],
'T178': ['CACDBAAACCCAE'],
'T067': ['BACAACCDBAABACCACCAAABCCACACCCCAE']}

Я использую библиотеку, которая принимает список строк и выполняет некоторую обработку (в этом примере генерирует общие префиксы). Таким образом, я извлекаю все значения из вышеизложенного. Когда обработка завершена (в этом примере я получаю префиксы), я заинтересован в присвоении этих обработанных строк (здесь общих префиксов) обратно ключам в dict. Например. как то так:

{'T096': ['AAB'],
'T197': ['AAB']}  # in the rest, there are no common prefixes, so ignored, or set to None

Теперь мне нужно сохранить отображение между ключами и значениями, даже после извлечения всех значений. Есть ли способ сделать это элегантно?

Редактировать: Заменить "получить префикс" на "обработка строки", чтобы отразить более широкий масштаб проблемы!

1 Ответ

0 голосов
/ 03 ноября 2018

Используйте словарь-понимание с collections.Counter:

from collections import Counter

d = {'T096': ['AABBAACACCAADBAACCAAAACACCBBAE'],
'T122': ['AACAABBBCABBDAACABCACABBAAACCCCAE'],
'T154': ['ABAABDBAAACCCAE'],
'T169': ['CCDBAACCAAAACCAE'],
'T176': ['BDACACCAAAACCCCAE'],
'T183': ['BBAACAACCBDAACBACCCCAAAACCAE'],
'T197': ['AABBAACABABACABAAABDBAAACCAE'],
'T178': ['CACDBAAACCCAE'],
'T067': ['BACAACCDBAABACCACCAAABCCACACCCCAE']}

c = Counter(x[0][:3] for x in d.values())
print({k: v[0][:3] for k, v in d.items() if c[v[0][:3]] > 1})

# {'T096': 'AAB', 'T197': 'AAB'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...