gpt4 book ai didi

python - 计算使用多个键找到字典值的次数

转载 作者:太空狗 更新时间:2023-10-30 01:51:30 25 4
gpt4 key购买 nike

我在 python 工作。有没有一种方法可以计算字典中的值被多个键找到的次数,然后返回一个计数?

因此,例如,如果我有 50 个值,并且我运行一个脚本来执行此操作,我将得到一个如下所示的计数:

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

以上会告诉我 23 个值出现在 1 个键中,15 个值出现在 2 个键中,7 个值出现在 3 个键中,5 个值出现在 4 个键中。

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

这是我的字典示例(它是细菌名称):

{'0': ['Pyrobaculum'], '1': ['分枝杆菌', '分枝杆菌', '分枝杆菌', '分枝杆菌', '分枝杆菌', '分枝杆菌', '分枝杆菌', '分枝杆菌', '分枝杆菌', '分枝杆菌', '分枝杆菌', '分枝杆菌', '分枝杆菌', '分枝杆菌'], '3': ['Thermoanaerobacter', 'Thermoanaerobacter'], '2': ['螺杆菌', 'Mycobacterium'], '5': ['Thermoanaerobacter', 'Thermoanaerobacter'], '4': ['Helicobacter'], '7': ['Syntrophomonas'], '6': ['Gelria'] , '9': ['弯曲杆菌', '弯曲杆菌'], '8': ['Syntrophomonas'], '10': ['脱硫杆菌', '分枝杆菌']}

所以从这个示例中,有 8 个唯一值,我得到的理想反馈是:

1:4
2:3
3:1

所以4个细菌名称只在一个键中,在两个键中找到3个细菌,在三个键中找到1个细菌。

最佳答案

所以除非我读错了你想知道的:

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

我采用了一种没有其他答案优雅的方法,但已为您将问题分解为单独的步骤:

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]

您也可以test this code on codepad .

关于python - 计算使用多个键找到字典值的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18582370/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com