我有一个字典列表如下:
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
答案 0 :(得分: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("...")
虽然可以使用更好的名字......
答案 1 :(得分:1)
如果您正在寻找单线程(而不是可重复使用的代码),并且您的数据量很小,则可以执行以下操作:
[elem["id"] for elem in myList].index(8)
从每个dict中提取id,然后查找提供的id的索引。根据您的总体目标和数据集的外观,这可能是您想要的,也可能不是......
答案 2 :(得分:1)
修改:请将您接受的答案更改为@ delnan的更正答案,该答案非常相似且可能效果更佳。
答案 3 :(得分:-1)
您可以实施自己的列表。这是打印第一个找到的结果的示例。我添加了ValueError来复制.index()的现有行为。
class DictList(list):
def index(self, obj):
for i, o in enumerate(self):
if o['id'] == obj['id']:
return i
else:
raise ValueError('x not in list')
myList = DictList(({'id':1,'key1':'a','key2':'b'},{'id':8,'key1':'c','key2':'d'},
{'id':6,'key1':'a','key2':'p'}))
>>> print myList.index({'id': 8})
1
>>> print myList.index({'id': 10})
ValueError: x not in list