Python 使用生成器在双嵌套字典列表中搜索元素
我有一份字典的清单。在每个字典中,我需要使用字典中的值,字典中的值:Python 使用生成器在双嵌套字典列表中搜索元素,python,dictionary,Python,Dictionary,我有一份字典的清单。在每个字典中,我需要使用字典中的值,字典中的值: [{'Cells': {'Address': 'Нижний Кисельный переулок, дом 3, строение 1', 'AdmArea': 'Центральный административный округ', 'District': 'Мещанский район', 'IsNetObject': 'нет', 'Name': 'Юнион Джек', 'Oper
[{'Cells': {'Address': 'Нижний Кисельный переулок, дом 3, строение 1',
'AdmArea': 'Центральный административный округ',
'District': 'Мещанский район',
'IsNetObject': 'нет',
'Name': 'Юнион Джек',
'OperatingCompany': None,
'PublicPhone': [{'PublicPhone': '(495) 621-19-63'}],
'SeatsCount': 30,
'SocialPrivileges': 'нет',
'geoData': {'coordinates': [37.62158794615201, 55.76536695660836],
'type': 'Point'},
'global_id': 20660594},
'Id': 'ae3e9479-070f-4d66-9429-de3acd8427ac',
'Number': 1},
{'Cells': {'Address': 'проспект Мира, дом 91, корпус 1',
'AdmArea': 'Северо-Восточный административный округ',
'District': 'Останкинский район',
'IsNetObject': 'нет',
'Name': 'Бар «Джонни Грин Паб»',
'OperatingCompany': None,
'PublicPhone': [{'PublicPhone': '(495) 602-45-85'}],
'SeatsCount': 50,
'SocialPrivileges': 'нет',
'geoData': {'coordinates': [37.635709999611, 55.805575000159],
'type': 'Point'},
'global_id': 20660628},
'Id': 'c5301186-00bb-4a1f-af03-6f3237292a51',
'Number': 2},
我得到了坐标[格度,姿态]
。我想找出给定坐标和字典中坐标之间的最小距离。所以我需要迭代字典,计算距离。
我是个新手,但我想更专业地使用生成器来计算距离。但是,使用\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
那么,简而言之:在这个数据结构中,找到距给定点的最小距离的最有效方法是什么?首先,假设您有一个函数get_distance(),该函数用lat和long查找两点之间的距离。我可以描述它,但我认为现在这不是问题的重点。然后,代码将如下所示:
cells = {...} # your data is here
point = [..] # coordinates of the point
distances = {get_distance(point, cell['Cells']['geoData']['coordinates']): cell['Id'] for cell in cells} # I don't know do you need a whole entry to be found or only `Id`
closest_id = distances[min(distances.keys())]
当然,这只是可能的解决方案。我已经通过dict理解完成了,但有时通过suaulfor
循环更容易实现。如果有什么不清楚的地方,请告诉我
如果您在编写get\u distance
函数时遇到问题,这里有一个例子:(当然需要修改一下,使其看起来像get\u distance函数)首先,让我们假设您有一个函数get\u distance(),该函数使用lat和long查找两点之间的距离。我可以描述它,但我认为现在这不是问题的重点。然后,代码将如下所示:
cells = {...} # your data is here
point = [..] # coordinates of the point
distances = {get_distance(point, cell['Cells']['geoData']['coordinates']): cell['Id'] for cell in cells} # I don't know do you need a whole entry to be found or only `Id`
closest_id = distances[min(distances.keys())]
当然,这只是可能的解决方案。我已经通过dict理解完成了,但有时通过suaulfor
循环更容易实现。如果有什么不清楚的地方,请告诉我
如果您在编写get\u distance
函数时也遇到问题,那么这里有一个例子:(当然需要修改一下,使其看起来像get\u distance函数)很抱歉,这里没有重复的键@正如您所看到的,所有“单元”键都在不同的字典中。如果我需要重复这些格言,这仍然是一个问题吗?谢谢你对地理测量学的建议,但我想我只需要一个最小的欧几里得距离,一旦人们回答了,不要改变这个问题it@jonrsharpe还没有人接。解决方案并不可行work@dsgdfg我的观点非常接近(1镇的特例),所以我认为WSG是平面协调的,但这里没有重复的关键!正如您所看到的,所有“单元”键都在不同的字典中。如果我需要重复这些格言,这仍然是一个问题吗?谢谢你对地理测量学的建议,但我想我只需要一个最小的欧几里得距离,一旦人们回答了,不要改变这个问题it@jonrsharpe还没有人接。解决方案并不可行work@dsgdfg我的观点非常接近(1镇的特例),所以我认为WSG是扁平的坐标,请看Edd1!无法复制它。。。您使用什么版本的Python?也许您可以尝试使用类似于dict([(获取距离(点,单元格['Cells']['geoData']['coordinates']),单元格['Id'])的内容来表示单元格中的单元格])
我正在使用python 3.5。请帮我弄清楚,单元格
-您的解决方案中的词典列表?嗯,那应该没问题。。。是的,cells是一个带有地址的dict列表,上面是看起来(几乎)像你的代码的副本-我输入了一个变量名,这并不重要。代码对我有用..请参见Edit1!无法复制它。。。您使用什么版本的Python?也许您可以尝试使用类似于dict([(获取距离(点,单元格['Cells']['geoData']['coordinates']),单元格['Id'])的内容来表示单元格中的单元格])
我正在使用python 3.5。请帮我弄清楚,单元格
-您的解决方案中的词典列表?嗯,那应该没问题。。。是的,cells是一个带有地址的dict列表,上面是看起来(几乎)像你的代码的副本-我输入了一个变量名,这并不重要。代码对我有用。。