使用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
我知道这是一个有缺陷的代码,因为元素并不总是按照显示的顺序增加。我一直在撞墙,试图找到一个更好的方法来做这几天,所以任何指导都会非常感激。
提前感谢您,如果我没有正确遵循任何协议,请告诉我。这是我第一次在这个网站上提问。
答案 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
算法:
使用与数组&amp;的第一个元素的差异初始化val用第0个索引初始化ind。
循环播放数组中的所有元素:
val
更新val
并将ind
更新到其位置