当前位置: 首页 > 面试题库 >

计算用一个以上的键找到一个字典值的次数

夹谷苗宣
2023-03-14
问题内容

我正在使用python。有没有一种方法可以计算使用一个以上的键在字典中找到值的次数,然后返回计数?

因此,例如,如果我有50个值,并且运行了一个脚本来执行此操作,那么我将得到一个看起来像这样的计数:

1: 23  
2: 15  
3: 7  
4: 5

上面的内容告诉我,1个键中显示23个值,2个键中显示15个值,3个键中显示7个值,4个键中显示5个值。

另外,如果我的字典中每个键有多个值,此问题是否会改变?

这是我字典的一个样本(它是细菌名称):

{'0': ['Pyrobaculum'], '1': ['Mycobacterium', 'Mycobacterium', 'Mycobacterium', 'Mycobacterium', 'Mycobacterium', 'Mycobacterium', 'Mycobacterium', 'Mycobacterium', 'Mycobacterium', 'Mycobacterium', 'Mycobacterium', 'Mycobacterium', 'Mycobacterium', 'Mycobacterium'], '3': ['Thermoanaerobacter', 'Thermoanaerobacter'], '2': ['Helicobacter', 'Mycobacterium'], '5': ['Thermoanaerobacter', 'Thermoanaerobacter'], '4': ['Helicobacter'], '7': ['Syntrophomonas'], '6': ['Gelria'], '9': ['Campylobacter', 'Campylobacter'], '8': ['Syntrophomonas'], '10': ['Desulfitobacterium', 'Mycobacterium']}

因此,从此示例中,有8个唯一值,我将得到的理想反馈是:

1:4
2:3
3:1

因此,一个键中只有4个细菌名称,两个键中只有3个细菌,三个键中只有1个细菌。


问题答案:

因此,除非我读错了,否则您想知道:

  • 对于原始字典中的每个值,每个不同的值计数会出现多少次?
  • 本质上 ,您想要的是 字典中值 频率

我采用了其他方法无法回答的优雅方法,但已将问题分解为各个步骤:

d = {'0': ['Pyrobaculum'], '1': ['Mycobacterium', 'Mycobacterium', 'Mycobacterium', 'Mycobacterium', 'Mycobacterium', 'Mycobacterium', 'Mycobacterium', 'Mycobacterium', 'Mycobacterium', 'Mycobacterium', 'Mycobacterium', 'Mycobacterium', 'Mycobacterium', 'Mycobacterium'], '3': ['Thermoanaerobacter', 'Thermoanaerobacter'], '2': ['Helicobacter', 'Mycobacterium'], '5': ['Thermoanaerobacter', 'Thermoanaerobacter'], '4': ['Helicobacter'], '7': ['Syntrophomonas'], '6': ['Gelria'], '9': ['Campylobacter', 'Campylobacter'], '8': ['Syntrophomonas'], '10': ['Desulfitobacterium', 'Mycobacterium']}

# Iterate through and find out how many times each key occurs
vals = {}                       # A dictonary to store how often each value occurs.
for i in d.values():
  for j in set(i):              # Convert to a set to remove duplicates
    vals[j] = 1 + vals.get(j,0) # If we've seen this value iterate the count
                                # Otherwise we get the default of 0 and iterate it
print vals

# Iterate through each possible freqency and find how many values have that count.
counts = {}                     # A dictonary to store the final frequencies.
# We will iterate from 0 (which is a valid count) to the maximum count
for i in range(0,max(vals.values())+1):
    # Find all values that have the current frequency, count them
    #and add them to the frequency dictionary
    counts[i] = len([x for x in vals.values() if x == i])

for key in sorted(counts.keys()):
  if counts[key] > 0:
     print key,":",counts[key]

您也可以在键盘上测试此代码。



 类似资料:
  • 问题内容: 如果我有这样的事情: 例如,如果我想将“ 0”的出现次数作为一个值进行计数而不必重复整个列表,那甚至有可能吗?如何? 问题答案: 正如我在评论中提到的,您可以在函数内使用生成器,如下所示: 或者,作为一种稍微优化和实用的方法,您可以使用如下功能: 基准测试: 请注意,虽然在这种情况下使用函数可能会得到更好的优化,但是为了获得关于这两种方法的全面而通用的想法,您还应该针对较大的数据集运行

  • 问题内容: 我是python的新手,我列出了每年的年份和值。我想做的是检查字典中是否已经存在年份,如果存在,则将值附加到特定键的值列表中。 例如,我有一个年份列表,每年都有一个值: 我想做的是用年作为键填充那些字典,而那些数字作为值填充字典。但是,如果我两次列出了2009,那么我想将该第二个值追加到该词典中的值列表中,因此我想: 现在,我有以下内容: 问题答案: 如果我可以重新表述您的问题,您想要

  • 我有两本字典Dict1和DICT2。Dict1中每个键的值如下所示: 但是Dict2由键组成,这些键是DICT1中的值。DICT2中的值是由元组组成的列表,如下所示。 我得到的当前输出是 我想要的输出应该是字典式的:

  • 问题内容: 这个问题已经在这里有了答案 : 如何在Python中将两个列表组合成字典?[重复] (6个答案) 5年前关闭。 Python中是否有将两个列表合并成字典的 内置 函数?喜欢: 哪里: 充当包含键的列表。 充当包含值的列表 有一个名为array_combine的函数可以实现此效果。 问题答案: 似乎这样应该可以,尽管我猜这不是 一个 单一的功能: 从这里开始:如何在Python中将两个列

  • 问题内容: 我只想在给定列表中创建 一行 字典。字典的键将是索引,值将是列表的元素。像这样: 输出: 关于我为什么要 一条 线,我没有任何具体要求。我只是在探索python,想知道是否有可能。 问题答案: 将产生 返回一个枚举对象。 sequence 必须是序列, 迭代器 或其他支持迭代的对象。所返回的迭代器的方法返回,其中包含一个计数(从 start开始 ,默认为0)以及从对 序列进行 迭代获得

  • 问题内容: 在Django模板中,有没有办法从其中有空格的键中获取值?例如,如果我有一个像这样的字典: 如何在模板中引用该值?伪语法可能是: 问题答案: 没有干净的方法使用内置标签来执行此操作。尝试做类似的事情: 将引发解析错误。 你可以在字典中进行for循环(但丑陋/效率低下): 自定义标签可能更干净: 并在模板中使用它,如下所示: 或者,也许尝试重组你的字典,使其具有“更易于使用”的键。

  • 问题内容: 我是python的新手,我列出了每年的年份和值。我想做的就是检查字典中是否已经存在年份,如果存在,则将值附加到特定键的值列表中。 举例来说,我有一个年份列表,每年都有一个值: 我想做的是用年作为键填充那些字典,而那些数字作为值填充字典。但是,如果我两次列出了2009,那么我想将该第二个值附加到该词典中的值列表中,因此我想: 现在,我有以下内容: 问题答案: 如果我可以重新表述你的问题,