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

时间:2018-03-14 10:51:58

标签: python list dictionary tuples counter

我已经多次问过这种问题了,但不幸的是,这次我有点麻烦。

我有一个格式的词典:

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})

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

我可以改变的事情:

  • 字典可能是嵌套元组的集合?即(bob,(农民,9))如果这有帮助吗?
  • 如果只返回了事件列表,我不会介意i,e 2,2,1,1
  • 也不介意被告知有更好的方法来做到这一点。

我想要做的是在泡泡图表中显示泡泡的大小。 我希望能够在如上所述的相同索引处提取相同长度的列表。

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

3 个答案:

答案 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}