Skip to main content
 首页 » 编程设计

python之如果满足某些条件,如何从另一个字典创建字典

2025年05月04日26xing901022

来自字典:

{0: (u'Donald', u'PERSON'), 1: (u'John', u'PERSON'), 2: (u'Trump', u'PERSON'), 14: (u'Barack', u'PERSON'), 15: (u'Obama', u'PERSON'), 17: (u'Michelle', u'PERSON'), 18: (u'Obama', u'PERSON'), 30: (u'Donald', u'PERSON'), 31: (u'Jonh', u'PERSON'), 32: (u'Trump', u'PERSON')} 

我想创建另一个字典如下:

{u'Donald John Trump': 2, u'Barack Obama':1, u'Michele Obama':1} 

这里 0,1,2 和 30,31,32 键加 1 并且出现了两次。 14,15 17,18 各出现一次。有什么办法可以创建这样的字典吗?

请您参考如下方法:

我认为您需要解决的主要问题是通过对表示递增 int 序列的键进行分组来识别人员,正如您所描述的那样。

幸运的是,Python 有 a recipe为此。

from itertools import groupby 
from operator import itemgetter 
from collections import defaultdict 
 
dct = { 
    0: ('Donald', 'PERSON'), 
    1: ('John', 'PERSON'), 
    2: ('Trump', 'PERSON'), 
    14: ('Barack', 'PERSON'), 
    15: ('Obama', 'PERSON'), 
    17: ('Michelle', 'PERSON'), 
    18: ('Obama', 'PERSON'), 
    30: ('Donald', 'PERSON'), 
    31: ('John', 'PERSON'), 
    32: ('Trump', 'PERSON') 
} 
 
persons = defaultdict(int)  # Used for conveniance 
keys = sorted(dct.keys())   # So groupby() can recognize sequences 
 
for k, g in groupby(enumerate(keys), lambda d: d[0] - d[1]): 
    ids = map(itemgetter(1), g)                # [0, 1, 2], [14, 15], etc. 
    person = ' '.join(dct[i][0] for i in ids)  # "Donald John Trump", "Barack Obama", etc 
    persons[person] += 1 
 
print(persons) 
# defaultdict(<class 'int'>, 
#        {'Barack Obama': 1, 
#         'Donald John Trump': 2, 
#         'Michelle Obama': 1})