在Python中,我有一个字典列表:
mylist = [ { 'name': 'James', 'school': 'UCLA', 'date_joined': 2001 },
{ 'name': 'Jack', 'school': 'UCLA', 'date_joined': 2001 },
{ 'name': 'Fisher', 'school': 'NYU', 'date_joined': 2003 }]
Run Code Online (Sandbox Code Playgroud)
如何仅根据名称和学校密钥/值检查某个词典是否与现有记录匹配?
所以:
example1 = { 'name': 'James', 'school': 'UCLA', 'date_joined': 2007 }
example1 = { 'name': 'James', 'school': 'UCLA', 'date_joined': 2001 }
Run Code Online (Sandbox Code Playgroud)
应该都匹配,但是
example3 = { 'name': 'James', 'school': 'MIT', date_joined': 2001 }
Run Code Online (Sandbox Code Playgroud)
不应该。
显然有:
for m in myList:
if (m['name']==example['name'] and m['school']==example['school']):
match_found = True
continue
Run Code Online (Sandbox Code Playgroud)
但是有没有更紧凑的方法?
fields = ('name', 'school')
match_found = any(all(x[f]==example[f] for f in fields) for x in myList)
Run Code Online (Sandbox Code Playgroud)