Python 3.x 基于电阻器值的排序表(列表)

Python 3.x 基于电阻器值的排序表(列表),python-3.x,Python 3.x,我正在尝试使用Python3对第三列的电阻值表进行排序,以便根据后缀(即K、m等)对值进行正确排序。。下表是一个列表 Thick Film 0 .1W - Thick Film 0 .125W - Trimmer 100K - - Thermistor

我正在尝试使用Python3对第三列的电阻值表进行排序,以便根据后缀(即K、m等)对值进行正确排序。。下表是一个列表

Thick Film                              0    .1W          -
Thick Film                              0    .125W        -
Trimmer                              100K    -            -
Thermistor             1206           10K    -            -
Thick Film                            10K    .25W        5%
Thin Film              0603           10K    .1W         1%
Trimmer                               10K    -            -
Thin Film                           17.4K    .125W       1%
Thick Film                             18    -            -
Thick Film             0805            1K    -           5%
Thick Film                             1K    -            -
Trimmer                               20K    -            -
Thick Film                            22K    .5W       0.5%
Thick Film             0805           270    -           1%
Thick Film                             2K    .25W         -
Thick Film                             2K    .125W       1%
Thin Film              0603            2K    .1W         1%
Thin Film              1206            2K    -         0.1%
Trimmer                                2K    -            -
Thin Film              0805          3.9K    -         0.5%
Thick Film                           4.7K    .125W       1%
Thick Film             0805           47k    .125W       5%
Thin Film                              50    .1W          -
Trimmer                               50K    -            -
Trimmer                                5K    -            -
Thick Film             0805         60.4K    .5W         1%
Thick Film             0805         71.5K    .5W         1%
Thin Film              0805            75    -         0.5%
Thick Film             0805           75K    .5W         1%
Thick Film                           8.06    .1W          -


part_list = [['Thick Film ', '0805', '47k', '.125W', '5%'], ['Thick Film ', '0805', '270', '-', '1%'], ['Thick Film ', '0805', '1K', '-', '5%'], ['Thick Film ', '0805', '60.4K', '.5W', '1%'], ['Thick Film ', '0805', '71.5K', '.5W', '1%'], ['Thick Film ', '0805', '75K', '.5W', '1%'], ['Thick Film ', '', '0', '.1W', '-'], ['Thick Film ', '', '8.06', '.1W', '-'], ['Thick Film ', '', '2K', '.25W', '-'], ['Thick Film ', '', '10K', '.25W', '5%'], ['Thick Film ', '', '0', '.125W', '-'], ['Thick Film ', '', '2K', '.125W', '1%'], ['Thick Film ', '', '4.7K', '.125W', '1%'], ['Thick Film ', '', '18', '-', '-'], ['Thick Film ', '', '1K', '-', '-'], ['Thick Film ', '', '22K', '.5W', '0.5%'], ['Thin Film ', '', '-', '-', '-'], ['Thin Film ', '0603', '10K', '.1W', '1%'], ['Thin Film ', '0603', '2K', '.1W', '1%'], ['Thin Film ', '0805', '3.9K', '-', '0.5%'], ['Thin Film ', '0805', '75', '-', '0.5%'], ['Thin Film ', '', '50', '.1W', '-'], ['Thin Film ', '', '17.4K', '.125W', '1%'], ['Thin Film ', '1206', '2K', '-', '0.1%'], ['Trimmer ', '', '100K', '-', '-'], ['Trimmer ', '', '10K', '-', '-'], ['Trimmer ', '', '20K', '-', '-'], ['Trimmer ', '', '2K', '-', '-'], ['Trimmer ', '', '50K', '-', '-'], ['Trimmer ', '', '5K', '-', '-'], ['Trimmer ', '', '-', '-', '-']]

from operator import itemgetter

sorted_list = sorted(part_list, key=itemgetter(2))
for part in sorted_list:
    print("{:<15s}{:>12s}{:>14s}    {:<6s}{:>8s}".format(part[0], part[1], part[2], part[3], part[4], '\n'))
编辑:我刚刚注意到代码示例列表中的第三列中有欧姆,忽略它。它应该只是一个没有后缀的数值,或者在数字后面有一个K或M后缀


编辑2:刚刚用正确的列表修复了上面的问题。

我的格式有问题,表格下面的代码示例需要分开。谢谢大家!谢谢你,安德烈!获取索引器:列表索引超出范围:num,km=re.findallr'\d+\.?\d*k | m?',k[2],re.I[0],否则我喜欢这种简单性!好的,我看到在数据列表中有4个带“-”的项,因为值未知。我仍然需要这些行,我可以使用什么值来表示未知,以便它可以与您的代码一起工作?零是一个有效值,所以我不能使用它。编辑:可能是“.”?@sdproto您可以用-1表示它们。然后将这些项目放在第一位。我编辑了regexp以接受负值。尝试了-1,但仍然得到错误:num,km=re.findallr'\d+\.?\d*k | m?',k[2],re.I ValueError:没有足够的值来解包预期的2,得到1个hanks Andrej,这很有效!非常感谢你的帮助!
import re

part_list = [['Thick Film ', '', '0 ohms', '.1W', '-'], ['Thick Film ', '', '0 ohms', '.125W', '-'], ['Thick Film ', '0805', '1.0K ohms', '-', '5%'], ['Trimmer ', '', '100K ohms', '-', '-'], ['Thermistor', '1206', '10K ohms', '-', '-'], ['Thick Film ', '', '10K ohms', '.25W', '5%'], ['Thin Film ', '0603', '10K ohms', '.1W', '1%'], ['Trimmer ', '', '10K ohms', '-', '-'], ['Thin Film ', '', '17.4K ohms', '.125W', '1%'], ['Thick Film ', '', '18 ohms', '-', '-'], ['Thick Film ', '', '1K ohms', '-', '-'], ['Thick Film ', '', '2.0K ohms', '.25W', '-'], ['Trimmer ', '', '20K ohms', '-', '-'], ['Thick Film ', '', '22K ohms', '.5W', '0.5%'], ['Thick Film ', '0805', '270 ohms', '-', '1%'], ['Thick Film ', '', '2K ohms', '.125W', '1%'], ['Thin Film ', '0603', '2K ohms', '.1W', '1%'], ['Thin Film ', '1206', '2K ohms', '-', '0.1%'], ['Trimmer ', '', '2K ohms', '-', '-'], ['Thin Film ', '0805', '3.9K ohms', '-', '0.5%'], ['Thick Film ', '', '4.7K ohms', '.125W', '1%'], ['Thick Film ', '0805', '47k ohms', '.125W', '5%'], ['Thin Film ', '', '50 ohms', '.1W', '-'], ['Trimmer ', '', '50K ohms', '-', '-'], ['Trimmer ', '', '5K ohms', '-', '-'], ['Thick Film ', '0805', '60.4K ohms', '.5W', '1%'], ['Thick Film ', '0805', '71.5K ohms', '.5W', '1%'], ['Thin Film ', '0805', '75 ohms', '-', '0.5%'], ['Thick Film ', '0805', '75K ohms', '.5W', '1%'], ['Thick Film ', '', '8.06 ohms', '.1W', '-']]

def key_fn(k):
    num, km = re.findall(r'(-?\d+\.?\d*)(k|m)?', k[2], re.I)[0]
    return float(num) * {'':1, 'K':1_000, 'M':1_000_000}[str.upper(km)]

for v in sorted(part_list, key=key_fn):
    print(('{:<15}'*5).format(*v))
import re

part_list = [['Thick Film ', '', '0 ohms', '.1W', '-'], ['Thick Film ', '', '0 ohms', '.125W', '-'], ['Thick Film ', '0805', '1.0K ohms', '-', '5%'], ['Trimmer ', '', '100K ohms', '-', '-'], ['Thermistor', '1206', '10K ohms', '-', '-'], ['Thick Film ', '', '10K ohms', '.25W', '5%'], ['Thin Film ', '0603', '10K ohms', '.1W', '1%'], ['Trimmer ', '', '10K ohms', '-', '-'], ['Thin Film ', '', '17.4K ohms', '.125W', '1%'], ['Thick Film ', '', '18 ohms', '-', '-'], ['Thick Film ', '', '1K ohms', '-', '-'], ['Thick Film ', '', '2.0K ohms', '.25W', '-'], ['Trimmer ', '', '20K ohms', '-', '-'], ['Thick Film ', '', '22K ohms', '.5W', '0.5%'], ['Thick Film ', '0805', '270 ohms', '-', '1%'], ['Thick Film ', '', '2K ohms', '.125W', '1%'], ['Thin Film ', '0603', '2K ohms', '.1W', '1%'], ['Thin Film ', '1206', '2K ohms', '-', '0.1%'], ['Trimmer ', '', '2K ohms', '-', '-'], ['Thin Film ', '0805', '3.9K ohms', '-', '0.5%'], ['Thick Film ', '', '4.7K ohms', '.125W', '1%'], ['Thick Film ', '0805', '47k ohms', '.125W', '5%'], ['Thin Film ', '', '50 ohms', '.1W', '-'], ['Trimmer ', '', '50K ohms', '-', '-'], ['Trimmer ', '', '5K ohms', '-', '-'], ['Thick Film ', '0805', '60.4K ohms', '.5W', '1%'], ['Thick Film ', '0805', '71.5K ohms', '.5W', '1%'], ['Thin Film ', '0805', '75 ohms', '-', '0.5%'], ['Thick Film ', '0805', '75K ohms', '.5W', '1%'], ['Thick Film ', '', '8.06 ohms', '.1W', '-']]

def key_fn(k):
    num, km = re.findall(r'(-?\d+\.?\d*)(k|m)?', k[2], re.I)[0]
    return float(num) * {'':1, 'K':1_000, 'M':1_000_000}[str.upper(km)]

for v in sorted(part_list, key=key_fn):
    print(('{:<15}'*5).format(*v))
Thick Film                    0 ohms         .1W            -              
Thick Film                    0 ohms         .125W          -              
Thick Film                    8.06 ohms      .1W            -              
Thick Film                    18 ohms        -              -              
Thin Film                     50 ohms        .1W            -              
Thin Film      0805           75 ohms        -              0.5%           
Thick Film     0805           270 ohms       -              1%             
Thick Film     0805           1.0K ohms      -              5%             
Thick Film                    1K ohms        -              -              
Thick Film                    2.0K ohms      .25W           -              
Thick Film                    2K ohms        .125W          1%             
Thin Film      0603           2K ohms        .1W            1%             
Thin Film      1206           2K ohms        -              0.1%           
Trimmer                       2K ohms        -              -              
Thin Film      0805           3.9K ohms      -              0.5%           
Thick Film                    4.7K ohms      .125W          1%             
Trimmer                       5K ohms        -              -              
Thermistor     1206           10K ohms       -              -              
Thick Film                    10K ohms       .25W           5%             
Thin Film      0603           10K ohms       .1W            1%             
Trimmer                       10K ohms       -              -              
Thin Film                     17.4K ohms     .125W          1%             
Trimmer                       20K ohms       -              -              
Thick Film                    22K ohms       .5W            0.5%           
Thick Film     0805           47k ohms       .125W          5%             
Trimmer                       50K ohms       -              -              
Thick Film     0805           60.4K ohms     .5W            1%             
Thick Film     0805           71.5K ohms     .5W            1%             
Thick Film     0805           75K ohms       .5W            1%             
Trimmer                       100K ohms      -              -