[英]How to find index of a dictionary key value within a list? (python)
假设我有一个列表,例如:
listofpeople = [{'Jack': ['Blue', 'Red', 'Green']}, {'Barry': ['Red', 'Green', 'Orange']}]
如果我要搜索 'Jack' 的索引,如果 'Jack' 是列表中字典的键值,我将如何找到他的索引?
保持简单——
for people in listofpeople:
if 'Jack' in people:
idx = listofpeople.index(people)
如果 idx 最后有一个值,则您将获得以“jack”为键的元素的索引
>>> listofpeople = [{'Jack': ['Blue', 'Red', 'Green']}, {'Barry': ['Red', 'Green', 'Orange']}]
>>> [i for i, d in enumerate(listofpeople) if "Jack" in d.keys()]
[0]
>>> l = [{'Jack': ['Blue', 'Red', 'Green']}, {'Barry': ['Red', 'Green', 'Orange']}]
>>> import itertools as it
>>> list(filter(lambda x: x[1] == 'Jack', enumerate(it.chain(*l))))
[(0, 'Jack')]
我将变量l
解包为位置参数,然后将其传递给itertools.chain()
。 这会生成一个值为['Jack', 'Barry']
的平面列表。 内置函数enumerate()
返回一个包含计数(从 0 开始)和迭代迭代获得的值的元组。 我做的下一件也是最后一件事情是用小的匿名函数过滤第二个元素 ( x[1]
) 等于所需str
所有元组。
无论你做什么,请不要从d.keys()
返回的列表中查找字典键的存在。 直接查询字典效率更高。 (免责声明:显然这仅适用于 Python 2,因为 Python 3 中返回的视图还支持高效的成员资格测试......)
然后你可以只获取具有键的第一个项目的索引,例如,像这样:
idx = next((i for i,d in enumerate(listofpeople) if "Jack" in d), None)
供参考:
试试这个:
jack_indices = [i for i in range(len(listofpeople)) if listofpeople[i].keys() == ['Jack']]
或者,如果您的字典可以有多个键,并且您正在查找包含“Jack”作为键的所有索引,您可以执行以下操作:
jack_indices = [i for i in range(len(listofpeople)) if 'Jack' in listofpeople[i].keys()]
也许是这样的:
listofpeople = [{'Jack': ['Blue', 'Red', 'Green']}, {'Barry': ['Red', 'Green', 'Orange']}]
idx = 0
for i in listofpeople:
for j in i.keys():
if j == 'Jack':
print(idx)
break
idx += 1
name = "Jack"
for index, value in enumerate(listofpeople):
if name in value.keys():
print('{} at index {}'.format(value, index))
>>>{'Jack': ['Blue', 'Red', 'Green']} at index 0
这绝对不是最好的方式,但是和大家的回答不一样:
name = 'Jack'
idx = None
for ii, people in enumerate(listofpeople):
try:
people['Jack']
idx = ii
break
except KeyError:
continue
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.