Hakutaku 2018-04-08 15:08 采纳率: 100%
浏览 3334
已采纳

【Python】求助 字典value改成想要的值,具体如下

例如 dict1 = {'a': 10, 'b': 5, 'c': 5, 'd': 2, 'e': 2, 'f': 2, 'g': 1}
要求 得到两个新字典:
1. dictnew1 ={'a': 1, 'b': 2, 'c': 2, 'd': 3, 'e': 3, 'f': 3, 'g': 1}
新字典1 value所代表的是原字典value出现的频率。
比如 原字典 a:10 而10在原字典value里只出现过一次,所以新字典 a 的value变为1 。而原字典key b 和 c 的values都为 5 ,5出现了两次所以新字典 key b c value变为2.

        2. dictnew2 = {'a': 1, 'b': 2, 'c': 2, 'd': 4, 'e': 4, 'f': 4, 'g': 7}
        新字典2 里的value 所代表的意思是:例如 key a 是原字典里的第一个key,所以新字典2里 key a 的value 是1 ; key b 是源字典里第二个key,所以新字典2里 key b的value 是 2 ; 但 key c 在源字典里与key b 有着相同的 value ,所以在新字典2里 key c 的value 和key b 相同 也是2;到 key d 的时候,d在原字典里是第4个key,所以在新字典2里key d 的value是4 (而不是3)同理 e和 f 在新字典2里的value 也是4.而最后 key g 在原字典是第7个 key ,所以新字典2里 key g的value是7

        希望能给出详细的代码和解释,不胜感激。
  • 写回答

4条回答 默认 最新

  • chen222246lei 2018-04-09 07:03
    关注

    coding:utf-8

    from operator import itemgetter

    dict1 = {'a': 10, 'b': 5, 'c': 5, 'd': 2, 'e': 2, 'f': 2, 'g': 1}

    generate first dictionary

    tmpdict = {}
    for value in dict1.values():
    if value in tmpdict:
    tmpdict[value] += 1
    else:
    tmpdict.setdefault(value,1)

    dictnew1 = {}
    for name,value in dict1.items():
    dictnew1[name] = tmpdict[value]
    print(dictnew1)

    ~ # generate second dictionary

    n1 = 1
    n2 = 1
    lastvalue = 0
    dictnew2 = {}
    for name,value in dict1.items():
    if n1 == 1:
    dictnew2.setdefault(name,n1)
    lastvalue = value
    else:
    if value == lastvalue:
    dictnew2.setdefault(name,n2)
    else:
    dictnew2.setdefault(name,0)
    dictnew2[name] = n1
    lastvalue = value
    n2 = n1
    n1 += 1
    print(dictnew2)

    {'a': 1, 'b': 2, 'c': 2, 'd': 3, 'e': 3, 'f': 3, 'g': 1}
    {'a': 1, 'b': 2, 'c': 2, 'd': 4, 'e': 4, 'f': 4, 'g': 7}


    (program exited with code: 0)

    请按任意键继续. . .

    第一个字典:
    首先获得每个value的统计,存入一个临时字典tmpdict; 即第一个for循环
    然后将原字典(dict1)的name = tmpdict[value]

    第二个字典:
    其实就是按照dict1的原始顺序进行计数,碰到一样的value 值不变(用n2),一旦改变就用n1

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多
  • ¥15 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件
  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入