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

标签 python dictionary count

来自字典:

{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})

关于python - 如果满足某些条件,如何从另一个字典创建字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39062987/

相关文章:

动态类变量名的 pythonic 方法(ala PHP 的 $$var)

python - 更新 curdoc() 后从 Bokeh Fig 中删除 Label 布局

python - 意外的诅咒前/背景 256 色 init_pair'ing

python - 以这种格式将字典导出到文本文件

c++ - 我想在 C++ 中为 map<> 的给定 KEY 返回一个 VALUE。如果 KEY 不在 map<> 中,返回什么?

php - mysql查询计算评分总和

dynamic - 如何知道 C 中 Lua 函数的返回值计数?

mysql - 多分组SQL,点击和用户计数错误

python - 如何匿名化所选标签的 XML 数据?

python - 有人能解释一下这个 Python 程序中 * 的用法吗?