当嵌套列表是字典的值时,如何比较嵌套列表的特定元素?

时间:2018-04-24 05:15:02

标签: python

使用Python,我试图比较两个嵌套列表中列表的特定元素,以便打印与第二个元素值最接近的元素。这些嵌套列表是字典中键的值。它可能更容易可视化

myFstDict = {key1 : list1,         mySecDict = {key2 : list2,
             key1A: list1A}                     key2A: list2A}

list 1 = [ [a, 10, b],            list 2 = [ [g, 41, h],
           [c, 22, d],                       [i, 50, j],
           [e, 43, f], ]                     [k, 73, l], ]

在这种情况下,我采用列表2中第一个元素的第二个元素(即41)并找到列表1中列表的哪个第二个元素的值最接近。所以我将41与10,22和43进行比较。答案是43,因为它的值最接近41.然后我需要打印包含43的列表的索引。然后将重复列表2的下一个元素([i,50,j])。为简单起见,我只列出了每个字典中的一个列表。

到目前为止,我完成此操作的代码如下:

for key in myDict:
for i in range(len(mySecDict[key])):
    elmt_of_intrst = mySecDict[key][i][1]
    x=0
    while ((int(elmt_of_intrst) - int(myFirstDict[key][x][1])) > 0):
        x = x+1
    index_of_list = x

我知道这是一个有缺陷的代码,因为元素并不总是按照显示的顺序增加。我一直在撞墙,试图找到一个更好的方法来做这几天,所以任何指导都会非常感激。

提前感谢您,如果我没有正确遵循任何协议,请告诉我。这是我第一次在这个网站上提问。

1 个答案:

答案 0 :(得分:0)

我建议使用abs()函数来区分两个元素。随后是min算法的min-max部分。

for key in myDict:
 for k in mySecDict[key]:
    elmt_of_intrst = k[1]
    ind=0 
    val=abs(int(elmt_of_intrst) - int(myFirstDict[key][0][1]))
    for i in myFirstDict[key]: #every row in 2d list
     temp_val=i[1] # value at 2nd position/1st index
     difference = abs(int(elmt_of_intrst) - int(temp_val))
     if (difference < val):

        val = difference
        ind = [myFirstDict[key].index(i),i.index(temp_val)]
    print ind

min算法

  1. 使用与数组&amp;的第一个元素的差异初始化val用第0个索引初始化ind。

  2. 循环播放数组中的所有元素:

    • 如果下一个值(两个元素之间的绝对差异)小于val更新val并将ind更新到其位置