如何在列表中查找字典键值的索引? (蟒蛇)

时间:2018-03-09 12:44:53

标签: python list dictionary

假设我有一个列表如:

listofpeople = [{'Jack': ['Blue', 'Red', 'Green']}, {'Barry': ['Red', 'Green', 'Orange']}]

如果我要去寻找'杰克'的索引,如果'杰克'是列表中字典的键值,我怎么能找到他的索引?

8 个答案:

答案 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