假设我有一个列表如:
listofpeople = [{'Jack': ['Blue', 'Red', 'Green']}, {'Barry': ['Red', 'Green', 'Orange']}]
如果我要去寻找'杰克'的索引,如果'杰克'是列表中字典的键值,我怎么能找到他的索引?
答案 0 :(得分:3)
保持简单 -
for people in listofpeople:
if 'Jack' in people:
idx = listofpeople.index(people)
如果idx在结尾处有一个值,那么你有一个以'jack'为键的元素的索引
答案 1 :(得分:1)
>>> listofpeople = [{'Jack': ['Blue', 'Red', 'Green']}, {'Barry': ['Red', 'Green', 'Orange']}]
>>> [i for i, d in enumerate(listofpeople) if "Jack" in d.keys()]
[0]
答案 2 :(得分:1)
>>> 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
。
答案 3 :(得分:1)
无论您做什么,请不要在d.keys()
返回的列表中查找字典键的存在。更有效的是直接查询字典。 (免责声明:显然这仅适用于Python 2,因为Python 3中返回的视图也支持高效的成员资格测试......)
然后,您只需获取具有该键的第一个项目的索引,例如,如下所示:
idx = next((i for i,d in enumerate(listofpeople) if "Jack" in d), None)
供参考:
答案 4 :(得分:0)
试试这个:
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()]
答案 5 :(得分:0)
也许是这样的:
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
答案 6 :(得分:0)
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
答案 7 :(得分:0)
这绝对不是最好的方法,但与其他所有人的答案不同:
name = 'Jack'
idx = None
for ii, people in enumerate(listofpeople):
try:
people['Jack']
idx = ii
break
except KeyError:
continue