用于嵌套单词计数的Python循环/理解

2024-09-21 01:19:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在分析一些用户数据,我得到了一个(预处理为小写)用户名列表,如下所示: name_list = ['joebob', 'sallycat', 'bigbenny', 'davethepirate', 'nightninja', ...(many more)] 还有一本比较词典,我想对这些名字进行比较,看看某些单词与其他单词相比出现的频率。例如

comparisons = {"Pirates vs Ninjas": ["pirate", "ninja"],
               "Cats vs Dogs": ["cat", "dog"]}

我试图得到一个循环/理解,其输出如下

{"Pirates vs Ninjas": {"pirate": 224, "ninja": 342},
 "Cats vs Dogs": {"cat": 430, "dog": 391}}

(上面的数字只是最终结果字数的示例)

我知道使它工作所需的所有单个组件(字典理解和dict.get)。什么是正确的方式来把这一切放在一起

编辑澄清:我想看看有多少用户名包含单词“cat”,并将其记录在包含单词“dog”的数字旁边。结果将以“猫对狗”键记录在dict中。接下来,我会继续做下一个比较,“海盗与忍者”


Tags: 用户记录数字单词dict用户名catvs
1条回答
网友
1楼 · 发布于 2024-09-21 01:19:40
from collections import Counter

c = Counter(user_names)

result = {category: {entry: c[entry] for entry in entries}
          for category, entries in comparisons.items()}

首先在列表上运行Counter以获得用户名->;计数映射,然后使用dict&;通过comparisons列出理解。如果entry不存在,计数器将给出0

例如:

  • category == "Pirates vs Ninjas"
  • entry == "pirate"
  • entries == ["pirate", "ninja"]

样本数据:

user_names = ["pirate", "dog", "this", "ninja", "that", "cat", "cat", "ninja", "other", "cat"]

c = Counter(user_names)

result = {category: {entry: c[entry] for entry in entries}
          for category, entries in comparisons.items()}

然后

>>> result

{"Pirates vs Ninjas": {"pirate": 1, "ninja": 2}, "Cats vs Dogs": {"cat": 3, "dog": 1}}

如果希望允许不区分大小写和部分匹配,我们将不使用Counter,而是使用sum

result = {category: {entry: sum(entry in name for name in user_names) 
                                for entry in map(str.lower, entries)}
          for category, entries in comparisons.items()}

在这里,我们首先在搜索之前将entries映射到小写,我们不仅计算精确匹配,而且通过in运算符和sum计算“包含”类型匹配

相关问题 更多 >

    热门问题