Hakutaku
2018-04-08 15:08
采纳率: 83.3%
浏览 3.3k

【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

    点赞 评论
  • devmiao 2018-04-08 15:52
    点赞 评论
  • create_want 2018-04-09 03:50

    #!/usr/bin/env python3

    -*- coding: utf-8 -*-

    dict1 = {'a': 10, 'b': 5, 'c': 5, 'd': 2, 'e': 2, 'f': 2, 'g': 1}
    dictnew1 = {value:key for key,value in dict1.items()}
    print(dictnew1)

    点赞 评论
  • 简单free 2018-04-12 12:31

    dict1 = {'a': 10, 'b': 5, 'c': 5, 'd': 2, 'e': 2, 'f': 2, 'g': 1}
    dict2 = dict()
    #迭代dict1的KEY
    for d in dict1:
    dict2[d] =0 #初始化为0
    x = 0
    #迭代dict1的value
    for i in dict1.values():
    #如果相等,dict2[d]的值+1
    if i == dict1[d]:
    dict2[d]=dict2[d]+1
    print(dict2)

    点赞 评论

相关推荐 更多相似问题