python列表理解按键获取字典
给定“joe”键,我如何从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':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')
但是,如果您的字典只有一个键,并且每个字典的键都是唯一的,那么您的数据结构可能不是最优的。你可以有一个dictionarydic={'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']
为什么要使用字典列表(而不是简单的字典)?