在列表中查找部分字典元素的索引

3 投票
4 回答
1649 浏览
提问于 2025-04-16 06:55

我有一个字典列表,如下所示:

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("...")

不过,代码里的名字可以起得更好一些...

撰写回答