python中 r'', b'', u'', f'' 的含义

Python020

python中 r'', b'', u'', f'' 的含义,第1张

字符串前加 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 itemgetter 

a = {

        '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}}