我有一个像这样的大字典:
{'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
现在,即使提取了所有值之后,我仍需要保留键和值之间的映射。有办法优雅地做到这一点吗?
编辑:将“获取前缀”替换为“字符串处理”,以反映问题的更广泛范围!
答案 0 :(得分:1)
对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'}