Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python列表理解按键获取字典_Python - Fatal编程技术网

python列表理解按键获取字典

python列表理解按键获取字典,python,Python,给定“joe”键,我如何从我的列表中提取字典{'joe':60} my_list = [{'joe': 60}, {'dave': 61}] 我希望避免使用for循环 [dic for dic in my_list if 'joe' in dic] 或者更一般地说 def get_dicts(alist, key): return [dic for dic in alist if key in dic] get_dicts(my_list, 'joe') 但是,如果您的字典只有一

给定“joe”键,我如何从
我的列表中提取字典
{'joe':60}

my_list = [{'joe': 60}, {'dave': 61}]
我希望避免使用for循环

[dic for dic in my_list if 'joe' in dic]
或者更一般地说

def get_dicts(alist, key):
    return [dic for dic in alist if key in dic]

get_dicts(my_list, 'joe')
但是,如果您的字典只有一个键,并且每个字典的键都是唯一的,那么您的数据结构可能不是最优的。你可以有一本字典
dic={'joe':60,'dave':50}
,只需得到
dic[joe]

或者更一般地说

def get_dicts(alist, key):
    return [dic for dic in alist if key in dic]

get_dicts(my_list, 'joe')

但是,如果您的字典只有一个键,并且每个字典的键都是唯一的,那么您的数据结构可能不是最优的。你可以有一个dictionary
dic={'joe':60,'dave':50}
,只需要得到
dic[joe]
一个循环是不可避免的,但你可以很好地掩盖它:

import itertools
next(itertools.ifilter(lambda x: key in x, my_list))
这要么发出第一个匹配的dict,要么引发一个可以检查的
StopIteration
异常。或者您可以使用递归:

def matches(key, lst):
    if not lst:
        return None
    if key in lst[0]:
        return lst[0]
    return matches(key, lst[1:])

这仍然是一个for循环,但尽量避免看起来像一个。

循环是不可避免的,但你可以很好地掩盖它:

import itertools
next(itertools.ifilter(lambda x: key in x, my_list))
这要么发出第一个匹配的dict,要么引发一个可以检查的
StopIteration
异常。或者您可以使用递归:

def matches(key, lst):
    if not lst:
        return None
    if key in lst[0]:
        return lst[0]
    return matches(key, lst[1:])

这仍然是一个for循环,但尽量避免看起来像一个。

如果没有某种for循环,就不可能遍历列表。确切地说,我认为如果没有某种迭代,就无法在列表中搜索。如果没有某种for循环,就不可能遍历列表。确切地说,我不认为你可以在没有某种迭代的情况下搜索列表。如果每个dict只有一个,为什么不将整个列表转换成一个字典,然后返回
my_dict['joe']
为什么要使用字典列表(而不是简单的字典)?如果每个dict只有一个,为什么不将整个列表转换为字典,然后返回
my_dict['joe']
为什么要使用字典列表(而不是简单的字典)?