比较两个词典列表中的价值的Pythonic方法

我是
Python的新手,在
Python中我仍然试图摆脱C编码技术,所以如果这是一个微不足道的问题,请原谅我.我似乎无法找到最恐怖的方式来做到这一点.

我有两个dicts列表.两个列表中的各个dicts可能包含嵌套的dicts. (这实际上是一些Yelp数据,如果你很好奇.)第一个dicts列表包含这样的条目:

{business_id': 'JwUE5GmEO-sH1FuwJgKBlQ',
 'categories': ['Restaurants'],
 'type': 'business'
 ...}

第二个dicts列表包含如下条目:

{'business_id': 'vcNAWiLM4dR7D2nwwJ7nCA',
 'date': '2010-03-22',
 'review_id': 'RF6UnRTtG7tWMcrO2GEoAg',
 'stars': 2,
 'text': "This is a basic review",
 ...}

我想要做的是提取第二个列表中与第一个列表中的特定类别匹配的所有条目.例如,如果我对餐馆感兴趣,我只想要第二个列表中的entires,其中business_id与第一个列表中的business_id匹配,而“餐厅”字样出现在类别的值列表中.

如果我在SQL中将这两个列表作为表,我会在business_id属性上进行连接,然后只是一个简单的过滤器来获取我想要的行(其中餐馆类别或类似的东西).

这两个列表非常大,所以我遇到了效率和内存空间问题.在我将所有这些内容推送到SQL数据库之前,有人能给我一些指示吗?我和Pandas搞砸了一些,所以我对此有一些有限的经验.我在合并过程中遇到了麻烦.

最佳答案 假设您的列表名为l1和l2:

来自l1的所有元素:

[each for each in l1]

来自l1的所有元素与餐厅类别:

[each for each in l1
      if 'Restaurants' in each['categories']]

来自l2匹配id的所有元素与来自l1的元素与餐厅类别:

[x for each in l1 for x in l2 
   if 'Restaurants' in each['categories']
   and x['business_id'] == each['business_id'] ]
点赞