检查dict键是否在dict的列表(元组)中

时间:2018-03-16 12:02:05

标签: python python-3.x dictionary

我正在使用以下示例来检查项目是否在列表中:

var = 'a'
var_list = ('a','b','c')
if var in var_list:
  do_something()

但就我而言,我所拥有的是字典和字典列表:

var = {'name': 'John', 'age': 35, 'city': 'Orlando'}
var_list = ( {'name': 'John', 'age': 36, 'city': 'Orlando'} , \
             {'name': 'Alex', 'age': 22, 'city': 'New York'} , \
             {'name': 'Celes', 'age': 24, 'city': 'Vector'} )
if var['name'] in var_list:
  do_something()

我只需要在比较中检查密钥'name',否则如果var in var_list age,密钥name会有所不同,并且会导致不进入if条件。是否可以只比较var data = "[{"one":1}, {"two":2}]"; var result = JSON.parse(data); console.log(result) 键?

当然,我可以逐项迭代检查,但如果有一个功能或某些东西可以减少执行时间,那就太棒了。

3 个答案:

答案 0 :(得分:3)

您可以使用列表理解:

if var['name'] in [d['name'] for d in var_list]:
    doSomething()

答案 1 :(得分:2)

一种方法是测试词典列表中的一组名称。

from operator import itemgetter as iget

name_set = set(map(iget('name'), var_list))

if var['name'] in name_set:
    do_something()

答案 2 :(得分:1)

您可以使用内置函数chapter on Subsetting来检查是否匹配。它将根据值是否匹配返回布尔值#include <stdio.h> #include <stdlib.h> typedef struct{ int a; }str; int main(){ int i; str **str_ptr; str *str_ptr1; str_ptr = (str **)malloc(5*sizeof(str *)); for(i=0;i<5;i++){str_ptr[i]=malloc(sizeof(str));} str_ptr1 = (str *)malloc(5*sizeof(str)); printf("Type 1 : %p and %p \n",str_ptr1,str_ptr1+1); printf("Type 2 : %p and %p \n",str_ptr[0],str_ptr[1]); } auth_basic "Restricted Content"; auth_basic_user_file /etc/nginx/.htpasswd; location / { limit_req zone=admin burst=5 nodelay; limit_req_status 503; try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/run/php/php7.1-fpm.sock; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_index index.php; } location ^~ /.well-known/ { allow all; auth_basic off; }

True

但是,如果您对实际匹配的元素感兴趣,可以使用以下生成器表达式来执行此操作:

False