python - 如何按字典顺序对列表进行排序

标签 python sorting plot

我正在做一个物理项目,我想绘制一些东西。我正在从每个文件中取出平均值,并且我想绘制这些平均值。为了读取这些文件,我使用了 glob,但这搞乱了我的数据的整个顺序。当我尝试使用“排序”时,它不起作用。这是我的代码:

#importeren van libraries
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import glob

#definieren van de lijsten
i = 0
R1 = []
I1 = []
U1 = []
stdI = []
stdU = []

lijst = glob.glob('*.txt')
lijst = sorted(lijst)
#loop aanmaken
for i in lijst:
    try:
#        data inlezen
        data = pd.read_csv(i, skiprows=5, delimiter='\t',
                   names=['Time', 'Voltage', 'Current'], decimal=',')
    except:
        print('fout gegaan bij',i )

#   kolommen definieren  
    t = data['Time']
    U = data['Voltage']
    I = data['Current']

    Ug = np.mean(U)
    stdUg = np.std(U)
    Ig = np.mean(I)
    stdIg = np.std(I)
    R = (Ug / Ig)
    R1.append(R)
    stdI.append(stdIg)
    stdU.append(stdUg)
    I1.append(Ig)
    U1.append(Ug)


R1 = np.array(R1)
stdI = np.array(stdI)
stdU = np.array(stdU)
Irel = (stdI/Ig)
Urel = (stdU/Ug)
stdR = R*(Irel+Urel)

排序的方式是:

'0A.txt',
 '10A.txt',
 '11A.txt',
 '12A.txt',
 '13A.txt',
 '14A.txt',
 '15A.txt',
 '16A.txt',
 '17A.txt',
 '18A.txt',
 '19A.txt',
 '1A.txt',
 '20A.txt',
 '21A.txt',
 '22A.txt',

而不是1-22

最佳答案

sorted 函数采用一些可选参数。其中之一是“key”,它“指定一个参数的函数,用于从每个列表元素中提取比较键”。因此,您可以使用该函数将文件名转换为数字并返回该数字。我使用正则表达式来做到这一点:

lijst = sorted(lijst, key=lambda x: int(re.sub("[^0-9]","", x)))

该函数接受参数x,去除所有非数字,并返回一个整数。例如:“1A.txt” -> 1。这返回

['0A.txt', '1A.txt', '10A.txt', '11A.txt', '12A.txt', '13A.txt', '14A.txt', '15A.txt', '16A.txt', '17A.txt', '18A.txt', '19A.txt', '20A.txt', '21A.txt', '22A.txt']

您可以使用类似的技术将列表中的每个文件名映射到一个数字:

lijst= list(map(lambda x: int(re.sub("[^0-9]","", x)), lijst))

map 函数的返回值被转换为列表。这将返回

[0, 1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]

关于python - 如何按字典顺序对列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49537521/

相关文章:

R:如何在图中的负轴上使用正确的减号

python - 符号计算中基本代数假设的双向识别

python - 向量化 Pandas DataFrame

python - 在远程 SFTP 服务器上解压 tar.gz

javascript - 二维数组中各个数组的总和

r - 为绘图中的标题部分着色

python - 如何在 OpenCV 中的点之间画线?

algorithm - 搜索的时间复杂度

php - 摆脱 mysql 查询中重复的客户 ID

r - 右转