例如 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
希望能给出详细的代码和解释,不胜感激。
from operator import itemgetter
dict1 = {'a': 10, 'b': 5, 'c': 5, 'd': 2, 'e': 2, 'f': 2, 'g': 1}
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)
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
https://blog.csdn.net/justheretobe/article/details/52099454
#!/usr/bin/env python3
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)
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)