【问题标题】:count occurence of value (tuple set) in dictionary keep original dictionary length in output list/dictionary/ tuple计算字典中出现的值(元组集)在输出列表/字典/元组中保留原始字典长度
【发布时间】:2018-03-14 10:51:57
【问题描述】:

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

我有一本格式如下的字典:

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,(farmer,9)) 是否有帮助?
  • 不介意只返回出现的列表,即 2,2,1,1
  • 也不介意被告知有更好的方法来做到这一点。

我试图做的是在气泡图中出现我的气泡大小。 我希望能够在如上所述的相同索引处提取相同长度的出现列表。

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

【问题讨论】:

    标签: python list dictionary tuples counter


    【解决方案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
    

    【讨论】:

    • 您好,感谢您的回答!不幸的是,它不是我要找的那个。我提到我试图让工作和得分元组的重复出现,然后以某种方式将其返回到名称旁边 - 格式并不重要。还是谢谢!
    【解决方案2】:

    你已经成功了一半。只需链接您的 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})
    

    【讨论】:

    • 嗨!这正是我一直在寻找的!我在其他地方有一段非常相似的代码,但从没想过在这里也使用它。再次感谢您的帮助!非常感谢!
    【解决方案3】:

    首先不要使用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}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-17
      • 2016-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多