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

2024-04-26 00:20:07 发布

您现在位置: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

我理解这是一个有缺陷的代码,因为元素并非总是按所示的递增顺序排列。几天来,我一直在努力寻找一个更好的方法来做这件事,所以任何指导都将不胜感激。你知道吗

事先谢谢你,如果我没有正确遵守任何协议,请告诉我。这是我第一次在这个网站上提问。你知道吗


Tags: ofkey代码in元素列表for字典
1条回答
网友
1楼 · 发布于 2024-04-26 00:20:07

我建议使用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. 使用与数组第一个元素的差值初始化val&使用第0个索引初始化ind。

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

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

相关问题 更多 >