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