字典中值(元组集)的计数 在输出列表/字典/元组中保持原始字典长度



我已经看到过很多次这样的问题,但不幸的是,这次对我来说它有点扭曲。

我有一本格式的字典:

name: (job, score)

例:

dict = {bob: (farmer, 9), sue: (farmer, 9), tim: (farmer, 5), jill, (chef, 8)}

现在,如果我使用:

x =  Counter(x for x in dict.values())

我会按预期得到列表(但不是我想要的):

Counter({(farmer,9): 2, (farmer, 5): 1, (chef, 8): 1})

我真正想要的是看到每个名字都有他们工作的出现次数,并像这样得分:

Counter({bob:2, sue:2, tim:1, jill:1})

这也是说我希望输出字典长度与输入字典长度相同。

我可以改变的事情:

  • 字典也许可以设置嵌套元组? 即(鲍勃,(农民,9))如果这有帮助?
  • 不介意只返回出现列表,即 2,2,1,1
  • 也不介意被告知有更好的方法来做到这一点。

我试图做的是使出现次数成为气泡图中气泡的大小。 我希望能够提取与上述相同索引的相同长度的出现次数列表。

到目前为止,我有一个相等的工作和分数列表,我认为包含发生的第三个列表将有助于使图表更清晰。

字典在字符串周围省略了",这将导致运行时出错。因此:

dict = {'bob': ('farmer', 9), 'sue': ('farmer', 9), 'tim': ('farmer', 5), 'jill': ('chef', 8)}

由于字典中的值是相同格式的列表,因此您可以只为它们编制索引(就像任何其他列表一样):

for k, v in dict.items():
print(k,v[1])
#OUTPUT:
tim 5
bob 9
jill 8
sue 9

你已经完成了一半。只需链接您的 2 个字典,并记住永远不要在类后命名变量,例如使用d而不是dict

from collections import Counter
d = {'bob': ('farmer', 9), 'sue': ('farmer', 9),
'tim': ('farmer', 5), 'jill': ('chef', 8)}
x =  Counter(x for x in d.values())
res = Counter({k: x[v] for k, v in d.items()})
# Counter({'bob': 2, 'jill': 1, 'sue': 2, 'tim': 1})

首先不要使用 dict 作为变量名:

您可以尝试此方法,而无需导入任何内容。

dict_1 = {'bob': ('farmer', 9),'sue': ('farmer', 9), 'tim': ('farmer', 5), 'jill':('chef', 8)}

第一组相似值:

pre_data={}
for i,j in dict_1.items():
if j not in pre_data:
pre_data[j]=[i]
else:
pre_data[j].append(i)

现在抓住计数的长度

final_result={}
for i,j in pre_data.items():
if len(j)>1:
for sub_data in j:

final_result[sub_data]=len(j)
else:
final_result[j[0]]=1
print(final_result)

输出:

{'sue': 2, 'jill': 1, 'tim': 1, 'bob': 2}

最新更新