使用生成器搜索双嵌套词典列表中的元素

时间:2016-09-24 09:04:40

标签: python dictionary

我有一个dictionaris列表。在每个字典中,我都需要使用词典中的值,这些词汇在词典中:

[{'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},

我给了坐标[lattitude, attitude]。我想找到字典中给定坐标和坐标之间的最小距离。所以我需要迭代字典并计算距离。 我很新,但我希望通过使用发电机找到距离来更专业。但是,使用__next__(),一旦满足条件就会停止迭代,所以我不会,如果有可能的话。

所以,简而言之:在这个数据结构中找到距给定点最小距离的最有效方法是什么?

1 个答案:

答案 0 :(得分:0)

首先,让我们假设你有一个函数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理解做了它,但有时候用suaul for循环更容易做到这一点。如果不清楚,请告诉我。

如果您在编写get_distance函数时遇到问题 - 这里有一个例子:How can I quickly estimate the distance between two (latitude, longitude) points?(当然需要修改一下看起来像get_distance函数)