如何计算列表中某个项目的重复次数,该列表是字典中的一个值?
How to count the number of repeats for an item in a list which is a value in a dictionary?
所以我有一个字典 (dictionary2),其中每个值都是一个列表。我需要制作一个函数,在图表上显示这些数据,在我管理的 x 轴上使用键。我想创建一个单独的列表 (count_list),其中包含每个数字在属于给定键的列表中重复自身的频率的计数(字典的所有值只有一个单独的列表)。最终目标是创建一个散点图,其中重叠标记更大,我可以通过将这个单独的列表归因于散点图调用中的 's' 参数来实现。 (请注意,不同的颜色或其他东西也可以正常工作,但无论如何仍然需要 count_list)
我有 1 个不考虑重叠的工作版本(这可能会提供一些上下文,见下文)。
我目前正在尝试使用以下代码制作 count_list(为了方便实验,我将其放在函数之外):
count_list=[]
for key in dictionary2:
for value in dictionary2:
for M in value:
count= value.count(M)
count_list.append(count)
此 returns 一个 count_list 每个键重复相同的数字序列。我意识到我的代码可能过于简单,所以我对它不起作用并不感到惊讶。但是,我不确定从这里去哪里,也不明白为什么输出看起来像那样。
目前的情节是这样的:
def plot_dict(dataset):
#transforming data to be read correctly into the plot
d = dataset
x= []
y= []
for k, v in d.items():
x.extend(list(itertools.repeat(k, len(v))))
y.extend(v)
plt.figure(figsize=(30,30))
plt.plot(x,y, '.')
plt.title('FASTA plot', fontsize=45)
plt.xlabel('Sequence IDs', fontsize=30)
plt.ylabel('Molecular weight', fontsize=30)
plt.xticks(fontsize=15)
plt.yticks(fontsize=15)
plot_dict(dictionary2)
enter image description here
(我使用的是 jupyterlab 3.0.14。)
这是我第一次在 stack overflow 中发帖提问,所以如果我违反了任何礼仪,或者如果我对问题的解释有任何不清楚的地方,请告诉我!
我不确定我是否理解正确你需要什么,但它是这样的吗?
from typing import Dict
dictionary = {
"key1": [1, 2, 3, 4, 4, 1],
"key2": [1, 2, 2, 2, 1, 5],
"key3": [100, 3, 100, 9],
}
occurrences_dict: Dict[str, Dict[int, int]] = {key: {} for key in dictionary}
for key, numbers_list in dictionary.items():
for number in numbers_list:
occurrences = numbers_list.count(number)
occurrences_dict[key].update({number: occurrences})
print(occurrences_dict)
输出如下:
{
"key1": {1: 2, 2: 1, 3: 1, 4: 2},
"key2": {1: 2, 2: 3, 5: 1},
"key3": {100: 2, 3: 1, 9: 1},
}
你得到一个字典,其中的键与原始键相同,在每个键中,你有一个字典,其中包含每个数字在相应列表中出现的次数
不知道你是想对每个字典的值求和还是全部求和,我会尽量实现,你根据自己的具体使用情况进行调整。
使用列表压缩可以分解项目:
d = {'key1': [1, 2, 3, 4, 4, 1], 'key2': [1, 2, 2, 2, 1, 5], 'key3': [100, 3, 100, 9]}
w = [(a,x,b.count(x)) for a,b in d.items() for x in set(b)]
# w = [('key1', 1, 2), ('key1', 2, 1), ('key1', 3, 1), ('key1', 4, 2), ('key2', 1, 2),
# ('key2', 2, 3), ('key2', 5, 1), ('key3', 9, 1), ('key3', 3, 1), ('key3', 100, 2)]
然后迭代:
d = dict()
for key,i,value in w:
d[i] = value if i not in d else d[i]+value
# d = {1: 4, 2: 4, 3: 2, 4: 2, 5: 1, 9: 1, 100: 2}
所以我有一个字典 (dictionary2),其中每个值都是一个列表。我需要制作一个函数,在图表上显示这些数据,在我管理的 x 轴上使用键。我想创建一个单独的列表 (count_list),其中包含每个数字在属于给定键的列表中重复自身的频率的计数(字典的所有值只有一个单独的列表)。最终目标是创建一个散点图,其中重叠标记更大,我可以通过将这个单独的列表归因于散点图调用中的 's' 参数来实现。 (请注意,不同的颜色或其他东西也可以正常工作,但无论如何仍然需要 count_list)
我有 1 个不考虑重叠的工作版本(这可能会提供一些上下文,见下文)。
我目前正在尝试使用以下代码制作 count_list(为了方便实验,我将其放在函数之外):
count_list=[]
for key in dictionary2:
for value in dictionary2:
for M in value:
count= value.count(M)
count_list.append(count)
此 returns 一个 count_list 每个键重复相同的数字序列。我意识到我的代码可能过于简单,所以我对它不起作用并不感到惊讶。但是,我不确定从这里去哪里,也不明白为什么输出看起来像那样。
目前的情节是这样的:
def plot_dict(dataset):
#transforming data to be read correctly into the plot
d = dataset
x= []
y= []
for k, v in d.items():
x.extend(list(itertools.repeat(k, len(v))))
y.extend(v)
plt.figure(figsize=(30,30))
plt.plot(x,y, '.')
plt.title('FASTA plot', fontsize=45)
plt.xlabel('Sequence IDs', fontsize=30)
plt.ylabel('Molecular weight', fontsize=30)
plt.xticks(fontsize=15)
plt.yticks(fontsize=15)
plot_dict(dictionary2)
enter image description here
(我使用的是 jupyterlab 3.0.14。)
这是我第一次在 stack overflow 中发帖提问,所以如果我违反了任何礼仪,或者如果我对问题的解释有任何不清楚的地方,请告诉我!
我不确定我是否理解正确你需要什么,但它是这样的吗?
from typing import Dict
dictionary = {
"key1": [1, 2, 3, 4, 4, 1],
"key2": [1, 2, 2, 2, 1, 5],
"key3": [100, 3, 100, 9],
}
occurrences_dict: Dict[str, Dict[int, int]] = {key: {} for key in dictionary}
for key, numbers_list in dictionary.items():
for number in numbers_list:
occurrences = numbers_list.count(number)
occurrences_dict[key].update({number: occurrences})
print(occurrences_dict)
输出如下:
{
"key1": {1: 2, 2: 1, 3: 1, 4: 2},
"key2": {1: 2, 2: 3, 5: 1},
"key3": {100: 2, 3: 1, 9: 1},
}
你得到一个字典,其中的键与原始键相同,在每个键中,你有一个字典,其中包含每个数字在相应列表中出现的次数
不知道你是想对每个字典的值求和还是全部求和,我会尽量实现,你根据自己的具体使用情况进行调整。
使用列表压缩可以分解项目:
d = {'key1': [1, 2, 3, 4, 4, 1], 'key2': [1, 2, 2, 2, 1, 5], 'key3': [100, 3, 100, 9]}
w = [(a,x,b.count(x)) for a,b in d.items() for x in set(b)]
# w = [('key1', 1, 2), ('key1', 2, 1), ('key1', 3, 1), ('key1', 4, 2), ('key2', 1, 2),
# ('key2', 2, 3), ('key2', 5, 1), ('key3', 9, 1), ('key3', 3, 1), ('key3', 100, 2)]
然后迭代:
d = dict()
for key,i,value in w:
d[i] = value if i not in d else d[i]+value
# d = {1: 4, 2: 4, 3: 2, 4: 2, 5: 1, 9: 1, 100: 2}