簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM