我已经多次问过这种问题了,但不幸的是,这次我有点麻烦。
我有一个格式的词典:
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})
这也是说我希望输出字典长度与输入字典长度相同。
我可以改变的事情:
我想要做的是在泡泡图表中显示泡泡的大小。 我希望能够在如上所述的相同索引处提取相同长度的列表。
到目前为止,我有一个相同的工作和分数列表,第三个包含事件的列表将有助于使图表更清晰。
答案 0 :(得分:1)
你的dict省略''围绕字符串,这会在运行时导致错误。因此:
dict = {'bob': ('farmer', 9), 'sue': ('farmer', 9), 'tim': ('farmer', 5), 'jill': ('chef', 8)}
由于dict中的值是相同格式的列表,因此您可以将它们编入索引(就像任何其他列表一样):
for k, v in dict.items():
print(k,v[1])
#OUTPUT:
tim 5
bob 9
jill 8
sue 9
答案 1 :(得分:0)
你到了一半。只需链接您的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})
答案 2 :(得分:-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}