比较python中的两个变量列表

时间:2017-04-13 09:06:40

标签: python variables

我在python中有两个带元素的列表。我想在这两个列表中执行一些检查。我的清单如下:

list_A = [["'EASY'", "'LEVEL_C'", "'4'", '0.714', '\n'], ["'EASY'", "'LEVEL_D'", "'5'", '0.778', '\n'], ["'EASY'", "'LEVEL_D'", "'5'", '0.226', '\n'], ["'EASY'", "'LEVEL_D'", "'5'", '0.222', '\n'], ...]
list_B = [["'EASY'", "'LEVEL_B'", "'2'", '1.000', '\n'], ["'EASY'", "'LEVEL_C'", "'3'", '1.000', '\n'], ["'EASY'", "'LEVEL_D'", "'4'", '1.000', '\n'], ["'EASY'", "'LEVEL_D'", "'4'", '0.290', '\n'], ...]

对于变量" EASY"对于取值(LEVEL_A-LEVEL_F)的可变等级,有第三个变量对应于得分(1-6)和置信度变量(0-1)。我想要做的是比较变量easy和level的两个列表,并在所有情况下找到两个列表中的哪一个(list_A和list_B)具有更高的分数和信心。我怎么能这样做?

我构建规则的方式,一开始我得到了从可执行文件派生的行并将它们过滤到列表中。我的列表的矢量示例如下:

Rule: ('EASY', 'LEVEL_E') ==> ('4') , 0.182 
'EASY' 'LEVEL_E' '4'  0.182 
["'EASY'",  "'LEVEL_E'", , "'4'", '0.182', '\n']

以及我用于创建矢量的代码:

 for row in my_lines:
   print row
   row = re.sub('[()]', "", row)
   row = row.replace("Rule: ", "")
   row = row.replace(",", "")
   row = row.replace("==>", "")
   print row
   split = re.split(r' +', row)
   print split

然后,一旦我创建了我的列表,我就使用与变量Level对应的第二个元素对它们进行排序:

list_A.sort(key=lambda x: x[1])
list_B.sort(key=lambda x: x[1])

编辑:我已使用变量级别对列表进行了排序。现在我想比较两个关于所有变量水平得分的列表。当一个级别不存在时,分数为零,当相同分数存在两次时,系统应该更喜欢信任度最高的一个。如何比较变量级别的所有可能值?

2 个答案:

答案 0 :(得分:2)

这只是一个部分答案,但是将这些数据放在一个词典中会更加愉快:

dict_a = {
    'LEVEL_D': {'difficulty': 'EASY', 'score': 1, 'confidence': 0.778},
    'LEVEL_F': {'difficulty': 'EASY', 'score': 6, 'confidence': 0.750},
    'LEVEL_C': {'difficulty': 'EASY', 'score': 7, 'confidence': 0.714},
    }

dict_b = {
    'LEVEL_F': {'difficulty': 'EASY', 'score': 8, 'confidence': 0.800},
    'LEVEL_B': {'difficulty': 'EASY', 'score': 2, 'confidence': 0.900},
    'LEVEL_D': {'difficulty': 'EASY', 'score': 3, 'confidence': 1.000},
    }

然后你可以编写一个简单的for循环来获得内部dicts的期望值:

for level in dict_a:
    if level in dict_b:
        stats_a = dict_a[level]
        stats_b = dict_b[level]
        score_a = stats_a['score']
        score_b = stats_b['score']
        conf_a = stats_a['confidence']
        conf_b = stats_b['confidence']
        print(level, score_a, score_b, conf_a, conf_b)

我们需要弄清楚如何以这种方式重新排列数据。列表列表方法实际上也可以工作,但效率较低。主要问题是数据没有正确排序。

修改:要获取具有特定级别得分较高的列表名称,您可以执行以下操作:

for level in dict_a:
    if level in dict_b:
        stats_a = dict_a[level]
        stats_b = dict_b[level]
        container = 'A' if stats_a['score'] > stats_b['score'] else 'B'
        print('Container {} has the higher score for level {}.'.format(container, level))

答案 1 :(得分:0)

我的问题的最终解决方案是仅使用字符串的简单排序来排序列表,然后压缩两个列表以便能够执行比较。使用的代码如下:

list_A.sort(key=lambda x: x[1])
list_B.sort(key=lambda x: x[1])
res = zip(list_A, list_B)

然而,似乎前一个答案中提出的字典解决方案比使用列表更有效。