【问题标题】:Given a list of dictionaries, how can I find how many dictionaries each key appears in?给定一个字典列表,我怎样才能找到每个键出现在多少个字典中?
【发布时间】:2019-09-22 06:29:33
【问题描述】:

我有一个dictionaries 列表,每个dictionary 都将单词作为键,并且该单词在特定文档中出现的次数作为值。现在我想知道如何找到一个特定单词出现了多少dictionaries

假设我有以下词典列表:

dict1 = {'Association':5, 'Rule':2, 'Mining':3}
dict2 = {'Rule':4, 'Mining':1}
dict3 = {'Association':4, 'Mining':3}

计算一个单词出现在多少词典后的结果:

result_dict = {'Association':2, 'Rule':2, 'Mining':3}

【问题讨论】:

  • 你能举一些例子吗?并展示你尝试了什么?
  • 亲爱的@ngShravil.py 我已经编辑了这个问题。

标签: python list dictionary


【解决方案1】:

Counter 是一个dict 子类,可以在这里使用:

from collections import Counter


dicts = [dict1, dict2, dict3]

key_counters = [Counter(dictionary.keys()) for dictionary in dicts]
start_counter = Counter()

result_dict = sum(key_counters, start_counter)

assert result_dict == {'Association': 2, 'Rule': 2, 'Mining': 3}

【讨论】:

  • 这是一个比我更好的答案,应该被接受。
  • @ItamarMushkin 如何忽略区分大小写。关联和关联被区别对待。
  • 编辑了我的答案以包括不区分大小写。以后,请评论您所指的答案,而不是其他答案。
  • 伊塔马尔谢谢。 @JawadTariq 请单独提出新问题,特别是如果您已经接受了答案。
  • @JawadTariq 为了完整起见,这里也可以类似地实现不区分大小写,方法是将dictionary.keys() 替换为key.lower() for key in dictionary.keys()
【解决方案2】:

这可以通过字典理解轻松完成。
首先,从你的 dicts 中列出一个列表:

dict1 = {'Association':5,'Rule':2,'Mining':3}
dict2 = {'Rule':4,'Mining':1}
dict3 = {'Association':4,'Mining':3}

dicts = [dict1, dict2, dict3]

然后,用并集将字典中的所有单词组成一组(这可能是一种更简洁的方法,但这很有效):

all_words = set().union(*[d.keys() for d in dicts])

然后,计算每个单词出现在多少词典中:

{k: sum([1 for d in dicts if k in d.keys()]) for k in all_words}

这会从您的示例返回所需的输出。

【讨论】:

  • @JawadTariq,Itamar 对您的不区分大小写问题的回复基本上是将for k in all_words 替换为for k in map(str.lower, all_words)。将来,请评论您所指的答案,而不是其他答案。并且请单独提出新问题,特别是如果您已经接受了答案。
  • 谢谢@Eliadl。下次我会处理的。
猜你喜欢
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 2014-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多