Python 如何在Dicts中实现基本搜索
我有一份目录如下:Python 如何在Dicts中实现基本搜索,python,algorithm,dictionary,search,Python,Algorithm,Dictionary,Search,我有一份目录如下: [ {"name":"Some", "surname":"Body","age":22}, {"name":"Some", "surname":"One", "age":23}, {"name":"Any", "surname":"Body", "age":20} ] def search(data:dict, **kwargs): pass search(mydict, surname="Body") [ {"name":"Som
[
{"name":"Some", "surname":"Body","age":22},
{"name":"Some", "surname":"One", "age":23},
{"name":"Any", "surname":"Body", "age":20}
]
def search(data:dict, **kwargs):
pass
search(mydict, surname="Body")
[
{"name":"Some", "surname":"Body","age":22},
{"name":"Any", "surname":"Body", "age":20}
]
search(mydict, name="Some")
[
{"name":"Some", "surname":"Body","age":22},
{"name":"Some", "surname":"One", "age":23}
]
search(mydict, age=23)
[
{"name":"Any", "surname":"Body", "age":20}
]
我需要一个函数,它可以在dicts上进行搜索,如下所示:
[
{"name":"Some", "surname":"Body","age":22},
{"name":"Some", "surname":"One", "age":23},
{"name":"Any", "surname":"Body", "age":20}
]
def search(data:dict, **kwargs):
pass
search(mydict, surname="Body")
[
{"name":"Some", "surname":"Body","age":22},
{"name":"Any", "surname":"Body", "age":20}
]
search(mydict, name="Some")
[
{"name":"Some", "surname":"Body","age":22},
{"name":"Some", "surname":"One", "age":23}
]
search(mydict, age=23)
[
{"name":"Any", "surname":"Body", "age":20}
]
我怎样才能做到这一点
环境
- Python 3.5
all
测试包含kwargs
中确切键值的词典:
lst = [
{"name":"Some", "surname":"Body","age":22},
{"name":"Some", "surname":"One", "age":23},
{"name":"Any", "surname":"Body", "age":20}
]
def search(data:dict, **kwargs):
return [d for d in data if all(d[k]==v for k, v in kwargs.items())]
print(search(lst, surname="Body", age=22))
# [{'name': 'Some', 'age': 22, 'surname': 'Body'}]
您可以使用dict的.get
方法处理缺少的键,然后将sentinel对象作为默认值传递:
def search(data:dict, **kwargs):
return [d for d in data if all(d.get(k, object())==v for k, v in kwargs.items())]
如果您确实想在
搜索中传递键、值对的组合,这可能更有趣…欢迎使用StackOverflow。请阅读并遵循帮助文档中的发布指南。在这里申请。StackOverflow不是设计、编码或教程服务。这就是为什么我使用了**kwargs
?是的,你的例子并不建议你这样做。我们也猜不出你到底想要什么。最好是尽最大努力说明问题所在。例如,是否希望保留这些键、值对中的任何一个?或者全部?依我看,这可能不是dupe,因为dupe目标中的情况不是多值的。我可能倾向于使用all(d.get(k,object())==v…
@juanpa.arrivillaga Nice one。谢谢!