字典的两个键对应的value值一样,我要怎么输出两个不同的key和value对?
题目是:生成包含1000个随机字符的字符串,然后统计每个字符的出现次数。
要求:
1、利用random模块和string模块随机生成一个长度为1000由字符(包括英文字母,数字和标点符号)组成的字符串。
2、统计组成字符串的每个字符出现的次数,并将每个字符及其出现的次数保存在字典中。
要求用两种方式统计每个字符出现的次数:1)set+count;2)get方法
3、按每个字符出现的次数从大到小排序,并分行打印输出排在前五的每个字符及其出现的次数(从大到小)。
4、找到出现次数最多和最少的字符,打印输出出现次数最多和最少的字符及出现次数。
现在已经做到:
import random
import string
x = string.ascii_letters + string.digits + string.punctuation
y =
z = "".join(y)
dict1 = dict()
dict2 = dict()
print('随机生成的字符是',z)
a=''.join(set(z))
print('字符数量是',len(a))
#第一种统计方法
for a in z :
dict1 = dict1.get(a, 0) + 1
print(dict1)
#第二种
for a in z :
dict2.setdefault(a, 0)
dict2 += 1
print(dict2)
list1 = list(dict1.items())
list1.sort(key=lambda x:x,reverse=True)
print('从大到小是:',dict(list1))
newdict=dict(zip(dict1.values(),dict1.keys()))
def f(x) :
v1=sorted(dict1.values(),reverse=True)
print(newdict.get(v1),v1)
return
f(0)
f(1)
f(2)
f(3)
f(4)
print("出现次数最多的是:['",newdict.get(sorted(dict1.values(),reverse=True)),"']",sorted(dict1.values(),reverse=True))
print("出现次数最少的是:['",newdict.get(sorted(dict1.values(),reverse=True)),"']",sorted(dict1.values(),reverse=True))
我是用了讲字典的value和key反过来,但是这样会覆盖掉一些相同的数据
我一开始想的是已知value值输出对应的key值,但是我做不到
后面我又想了一个办法,就是能不能在f(0)这一步之后,在原来的dict1中删除掉这个key-value对
然后我又失败了,希望论坛的大神能给出合适的解决方法!
感谢感谢,我只是一个大一的学生,希望大家给的意见或者方法可以让我听懂~ 你做的方法是有错误的,给你修改了。
import random
import string
x = string.ascii_letters + string.digits + string.punctuation
y =
##z = "".join(y)
dict1 = dict()
dict2 = dict()
print('随机生成的字符是',"".join(y))
##a=''.join(set(z))
print('字符数量是',len(set(y)))
#第一种统计方法set + count
for a in set(y) :
dict1 = y.count(a)
print("第一种",dict1)
#第二种 get方法
for a in y :
dict2 = dict2.get(a, 0) + 1
print("第二种",dict2)
list1 = list(dict1.items())
list1.sort(key=lambda x:x,reverse=True)
print('从大到小是:',dict(list1))
print("-"*20)
print('前五:',dict(list1[:5]))
maxstr = {}
minstr = {}
for i in dict1:
if dict1 == max(dict1.values()):
maxstr = dict1
if dict1 == min(dict1.values()):
minstr = dict1
print("最多",maxstr)
print("最少",minstr)
import random
import string
def MakeRandom():
charactors = string.digits + string.ascii_letters + string.punctuation
result =
return result
def StringToDict(rs: str):
result = {}
for c in rs:
try:
result += 1
except Exception:
result = 1
return result
def CountSort(d: dict):
d = sorted(d.items(), key=lambda x : x, reverse=True)
return d
if __name__ == '__main__':
randomString = MakeRandom()
countDict = StringToDict(randomString)
countDict = CountSort(countDict)
print(countDict)
字典的键是唯一的,值用来计数不就完事了么 import random
import string
x = string.ascii_letters + string.digits + string.punctuation
y =
z = "".join(y)
dict1 = dict()
dict2 = dict()
print('随机生成的字符是',z)
a=''.join(set(z))
print('字符数量是',len(a))
#第一种统计方法
for a in z :
dict1 = dict1.get(a, 0) + 1
print(dict1)
#第二种
for a in z :
dict2.setdefault(a, 0)
dict2 += 1
print(dict2)
list1 = list(dict1.items())
list1.sort(key=lambda x:x,reverse=True)
#前五名,不管后面的
print('从大到小是:',dict(list1))
print('前五名')
for i in range(5):
print(*list1)
#前五名,如果后面的值跟第五名相同,就继续打印
print('从大到小是:',dict(list1))
print('前五名')
for i in range(1000):
if i < 5:
print(*list1)
else:
if list1 == list1:
print(*list1)
else:
break
count_max = max(dict1.values())
count_min = min(dict1.values())
#根据value找key
count_max_keys_list =
count_min_keys_list =
print("出现次数最多的是:",*count_max_keys_list,'出现次数为:',count_max)
print("出现次数最少的是:",*count_min_keys_list,'出现次数为:',count_min)
qq1151985918 发表于 2021-4-23 08:58
你做的方法是有错误的,给你修改了。
感谢。
页:
[1]