給定一個串列
[0,1,2,3,4,5,6,7,8,9,10,11,12,13]
我想在每個串列位置標記如下
['fir', 'fir', 'sec', 'fir', 'fir', 'fir', 'thr', 'sec', 'fou', 'fou', 'fou', 'thr', 'sec', 'fou']
關于查找字典 m
m={ "fir": [0,1,3,4,5],
"sec": [2,7,12],
"thr": [6,11],
"fou": [8,9,10,13]}
讓我們以前三個位置為例。
從字典上看m,位置0又1落在了鍵下fir。而第三個位置(例如,2)在鍵下sec。
因此,這三個的串列是 ['fir', 'fir', 'sec']。
為達到上述目的,特擬定如下
m={ "fir": [0,1,3,4,5],
"sec": [2,7,12],
"thr": [6,11],
"fou": [8,9,10,13]}
all_key=m.keys()
all_opt=[]
for idx in range (sum(len(v) for v in m.values())):
for nkey in all_key:
if idx in m[nkey]:
all_opt.append(nkey)
break
其中產生
opt=['fir', 'fir', 'sec', 'fir', 'fir', 'fir', 'thr', 'sec', 'fou', 'fou', 'fou', 'thr', 'sec', 'fou']
我想知道是否有比嵌套 for 回圈更好的選擇?
uj5u.com熱心網友回復:
您可以反轉映射字典,以便映射為:
valuei ? labelj代替label ? [value0...valuen]
您可以使用 dict comprehension 反轉字典
inv_m = {v: k for k, lst in m.items() for v in lst}
print(inv_m)
# {0: 'fir', 1: 'fir', 3: 'fir', 4: 'fir', 5: 'fir', 2: 'sec',
# 7: 'sec', 12: 'sec', 6: 'thr', 11: 'thr', 8: 'fou', 9: 'fou',
# 10: 'fou', 13: 'fou'}
現在,迭代給定的串列并將每個值映射到其相應的標簽。
lst = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
out = [inv_m[v] for v in lst]
print(out)
# ['fir', 'fir', 'sec', 'fir', 'fir', 'fir', 'thr', 'sec', 'fou',
# 'fou', 'fou', 'thr', 'sec', 'fou']
uj5u.com熱心網友回復:
創建一個固定大小的串列并通過將標簽放置到相應的索引來填充它:
lst = [0,1,2,3,4,5,6,7,8,9,10,11,12,13]
m = {
"fir": [0,1,3,4,5],
"sec": [2,7,12],
"thr": [6,11],
"fou": [8,9,10,13]
}
label_lst = [''] * len(lst)
for label, idxs in m.items():
for idx in idxs:
label_lst[idx] = label
print(label_lst)
輸出
['fir', 'fir', 'sec', 'fir', 'fir', 'fir', 'thr', 'sec', 'fou', 'fou', 'fou', 'thr', 'sec', 'fou']
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/363156.html
下一篇:決議“混合”字典
