模仿Python中的findWhere()函数行为

2024-10-01 13:46:09 发布

您现在位置:Python中文网/ 问答频道 /正文

下划线有一个方便的小函数findWhere(),它可以用来查找列表中的某个结构,比如

myList = [
  {'name': 'Thor'},
  {'name': 'Odin'},
  {'name': 'Freya'},
  {'name': 'Skadi'}
];
findWhere(myList, {'name': 'Skadi'});

结果:[{'name': 'Skadi'}]

更好的例子:

^{pr2}$

结果:

[{'name': 'Skadi',
'occupation': 'Queen of the Ice Giants',
'favorite color': 'purpz'}]

唉,我在python中找不到类似的东西。实现相同功能的python方法是什么?在


Tags: of函数name列表结构例子thorodin
2条回答

我将使用带有curry子集谓词的过滤器:

# assuming both key and values are hashable
subset = lambda subset: (lambda superset: set(subset.items()).issubset(set(superset.items())))
results = filter(subset(needle), haystack)

或者,如果dict的值可能不可散列,则子集需要为:

^{pr2}$

您可以简单地将其定义为generator

def find_where(iterable, dct):
    for item in iterable:
        if all(item[key] == value for key, value in dct.items()):
            yield item

my_list = [
  {'name': 'Thor', 'age': 23},
  {'name': 'Odin', 'age': 42},
  {'name': 'Freya', 'age': 50},
  {'name': 'Skadi', 'age': 23},
]

print list(find_where(my_list, {'age': 23}))

输出:

^{pr2}$

有关表达式“肉”的详细信息,请参见^{}list comprehensions。在

相关问题 更多 >