字符串前加 r
r"" 的作用是去除转义字符.
字符串前加 f
f 的作用是表示在字符串内支持大括号内的python 表达式
字符串前加 b
b的作用是表示这是一个 bytes 对象,后面字符串是bytes 类型。
字符串前加 u
表明后面字符串以 Unicode 格式 进行编码,一般用在中文字符串前面,防止因为源码储存格式问题,导致再次使用时出现乱码。
最近把自己的python程序移植到新的CentOS系统环境的时候出现了这么个报错:
本欲放弃,然,放弃非寡人之性格。
上网查了这个问题后发现,很多博主都是建议删掉与这个报错所有相关的 .pyc。
事实上,这是一种知其然不知其所以然的做法。
我也知道可以这么处理,但是为什么要这么处理呢?是什么原因导致的这类报错呢?
这个问题这些二把刀博主们当然回答不了,还是得自己动手。
一顿尝试性操作之后,发现这种运行错误是不同环境下的python版本不一致导致的。
我之前用的python是3.8.5版,而新系统用的是3.9.5版本,
采用python 3.8.5编译的 .pyc,并不能在python 3.9.5环境运行。
全部换成python 3.9.5编译python程序这个问题就彻底解决了。
首先字典这种数据类型本来就是无序的,需要排序的话,当然只能是列表这种可以排序的数据结构。
当然,如果只是输出的话,那么没问题,你转成字符串好了,想如何显示就如何显示。
干脆给你打出来好了:
from operator import itemgettera = {
'u1':{'i1':1,'i2':8,'i3':15,'i4':12},
'u2':{'i1':3,'i2':4,'i3':10,'i4':2},
'u3':{'i1':9,'i2':2,'i3':5,'i4':11},
'u4':{'i1':7,'i2':5,'i3':1,'i4':5}
}
b = {}
for u in a.keys():
b[u] = sorted(a[u].items(), key = itemgetter(1), reverse=False)[0:2]
l=sorted(b.items(), key = itemgetter(0),reverse=False)
s= ''
print l
for x in l:
d = {}
for y in x[1]:
d[y[0]] = y[1]
s += ',' + "'%s':%s" % (x[0],d)
print '{%s}' % s[1:]
结果:{'u1':{'i1': 1, 'i2': 8},'u2':{'i1': 3, 'i4': 2},'u3':{'i3': 5, 'i2': 2},'u4':{'i3': 1, 'i2': 5}}