在字典中分离键值,并在处理值后重新创建字典

时间:2018-11-03 11:28:59

标签: python dictionary

我有一个像这样的大字典:

{'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 :(得分: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'}