我有這樣的清單。
list=[[['name1','name2'],[n1,n2]], [['name3','name4'],[n3,n4]]]
如果輸入是name1,我想得到n1
類似地,如果輸入 if name3那么輸出應該是n3
Note: name1-Type str
n1- Type int
有什么辦法可以做到這一點嗎?..請向我建議解決方案/解決方案步驟,我可以按照這些步驟來解決這個問題..
uj5u.com熱心網友回復:
我看到從 構建中間查找字典my_list,然后根據需要查找:
my_list=[
[['name1','name2'],['n1','n2']],
[['name3','name4'],['n3','n4']]
]
lookup = {}
for double_tuple in my_list:
lhs, rhs = double_tuple
zipped = zip(lhs, rhs) # ['name1','name2'],['n1','n2'] → ['name1', 'n1'],['name2','n2']
lookup.update(dict(zipped))
print(lookup['name1']) # → 'n1'
uj5u.com熱心網友回復:
它可以通過串列理解輕松解決:
- 解壓串列中的元素
- 過濾 k1 == 輸入
- 獲得第一個結果,如果存在
input_ = "name1"
list_ = [[['name1','name2'],[n1,n2]], [['name3','name4'],[n3,n4]]]
candidates = [v1
for (k1, _), (v1, _) in list_
if k1 == input_]
if len(candidates) == 0:
print("No such key: " input_)
else:
print("Value is " candidates[0])
注意:我在名稱中使用了尾隨下劃線以避免覆寫內置函式(list和input)。覆寫內置函式是不好的做法。
uj5u.com熱心網友回復:
您可以filter結合使用next:
def get_item_from_key(input_list, key):
"""Return item corresponding to a specific key"""
try:
return next(filter(lambda x: x[0][0] == key, input_list))[1][0]
except StopIteration:
return None
因此,如果輸入串列是a = [[['name1', 'name2'], [0, 1]], [['name3', 'name4'], [2, 3]]],您可以詢問您感興趣的任何鍵:
get_item_from_key(a, 'name1') # this will return 0
get_item_from_key(a, 'name3') # this will return 2
get_item_from_key(a, 'name2') # this will return None
get_item_from_key(a, 'name5') # this will return None
uj5u.com熱心網友回復:
與@Zach Young 的回答類似,您可以通過zipping 對并使用子串列中的dict建構式來創建字典串列。然后使用collections.ChainMap,創建一個視圖。
from collections import ChainMap
dct = ChainMap(*[dict(zip(*sublist)) for sublist in lst])
然后
>>> print(dct['name1'])
n1
>>> print(dct['name3'])
n3
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/414101.html
標籤:
上一篇:如何按特定欄位Javascript對物件陣列進行排序
下一篇:如何列出年加月的最后兩位數字
