我已经看到过很多次这样的问题,但不幸的是,这次对我来说它有点扭曲。
我有一本格式的字典:
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}