Find the most similar number from list of lists in a dictionary python
Question:
I have a dictionary where the values are a list of lists:
dict1 = {"['x1', 'y1']": [['r1', 'r2'], [78, 125]],
"['x1', 'y1']": [['r1', 'r2'], [77, 112]],
"['x1', 'y1']": [['r1', 'r2'], [73, 110]],
"['x2', 'y2']": [['r2', 'r3'], [71, 103]]}
I am also giving a list of lists as input which i want to find in dict1
input1 = [['r1', 'r2'], [72, 112]]
The first list ['r1', 'r2']
is the same as in dict1
and can still be easily found. But for the second list, i need to find approximate numbers in dict1
. So for [72, 112]
it’s [73, 110]
.I don’t understand how to do it
Estimated output I want:
output = { "['x1', 'y1']": [['r1', 'r2'], [73, 110]]}
Answers:
Brief about the code.
(1) mini variable is set to the positive infinity to initialize the minimum difference to a high value.
(2) looping through all key-value pairs in the dict1
(3) if value[0] == input1[0]: if this condition satisfy it will check the `abs` value b/w input and dictionary if it is lower than mini it will update the mini value and also output value is updated
Code:
dict1 = {"['x1', 'y1']": [['r1', 'r2'], [78, 125]],
"['x1', 'y1']": [['r1', 'r2'], [77, 112]],
"['x1', 'y1']": [['r1', 'r2'], [73, 110]],
"['x2', 'y2']": [['r2', 'r3'], [71, 103]]}
input1 = [['r1', 'r2'], [72, 112]]
mini=float('inf')
output = {}
for key, value in dict1.items():
if value[0] == input1[0]:
diff1 = abs(value[1][0] - input1[1][0])
diff2 = abs(value[1][1] - input1[1][1])
if diff1+diff2 < mini:
output[key] = value
mini=diff1+diff2
print(output)
Output:
{"['x1', 'y1']": [['r1', 'r2'], [73, 110]]}
I have a dictionary where the values are a list of lists:
dict1 = {"['x1', 'y1']": [['r1', 'r2'], [78, 125]],
"['x1', 'y1']": [['r1', 'r2'], [77, 112]],
"['x1', 'y1']": [['r1', 'r2'], [73, 110]],
"['x2', 'y2']": [['r2', 'r3'], [71, 103]]}
I am also giving a list of lists as input which i want to find in dict1
input1 = [['r1', 'r2'], [72, 112]]
The first list ['r1', 'r2']
is the same as in dict1
and can still be easily found. But for the second list, i need to find approximate numbers in dict1
. So for [72, 112]
it’s [73, 110]
.I don’t understand how to do it
Estimated output I want:
output = { "['x1', 'y1']": [['r1', 'r2'], [73, 110]]}
Brief about the code.
(1) mini variable is set to the positive infinity to initialize the minimum difference to a high value.
(2) looping through all key-value pairs in the dict1
(3) if value[0] == input1[0]: if this condition satisfy it will check the `abs` value b/w input and dictionary if it is lower than mini it will update the mini value and also output value is updated
Code:
dict1 = {"['x1', 'y1']": [['r1', 'r2'], [78, 125]],
"['x1', 'y1']": [['r1', 'r2'], [77, 112]],
"['x1', 'y1']": [['r1', 'r2'], [73, 110]],
"['x2', 'y2']": [['r2', 'r3'], [71, 103]]}
input1 = [['r1', 'r2'], [72, 112]]
mini=float('inf')
output = {}
for key, value in dict1.items():
if value[0] == input1[0]:
diff1 = abs(value[1][0] - input1[1][0])
diff2 = abs(value[1][1] - input1[1][1])
if diff1+diff2 < mini:
output[key] = value
mini=diff1+diff2
print(output)
Output:
{"['x1', 'y1']": [['r1', 'r2'], [73, 110]]}