在列表中查找部分字典元素的索引
我有一个字典列表,如下所示:
myList=[{'id':1,'key1':'a','key2':'b'},{'id':8,'key1':'c','key2':'d'},
{'id':6,'key1':'a','key2':'p'}]
为了找到某个元素的索引,我现在执行以下语句:
print myList.index({'id':8,'key1':'c','key2':'d'})
这会返回1
不过,我想做类似这样的事情:
print myList.index({'id':8})
应该返回1
4 个回答
1
编辑:请把你接受的答案换成@delnan的修正答案,这个答案和之前的很相似,而且可能表现得更好。
3
如果你想要一个简单的一行代码(而不是可以重复使用的代码),而且你的数据量不大,你可以这样做:
[elem["id"] for elem in myList].index(8)
这段代码会从每个字典中提取出id,然后找到你提供的id的位置。根据你的整体目标和数据集的情况,这可能是你想要的,也可能不是……
1
这个实现应该比较简单。这个代码是为Python 3写的,如果你用的是Python 2,就应该用 .iteritems()
(这样不会创建一个临时的列表)。
def partial_dict_index(dicts, dict_part):
for i, current_dict in enumerate(dicts):
# if this dict has all keys required and the values match
if all(key in current_dict and current_dict[key] == val
for key, val in dict_part.items()):
return i
raise ValueError("...")
不过,代码里的名字可以起得更好一些...