例如
a = ['1', '2', '3', '4', '5', '6']
b = [[(1, 0.5), (2, 0.8)], [(4, 0.11), (6, 0.23)]]
我想得到一个矩阵c:
c = [0.5, 0.8, 0, 0.11, 0, 0]
那就像如果a中的i代表ww,ee中的i代表b中的n,然后用ee else 0代替
我尝试一些if and else命令,这是我的代码
for n in b:
for t,y in n:
for tt in a:
mmm = [y if t == ''.join(tt) else ''.join(tt)]
print(mmm)
但是失败了。在这种情况下我应该如何编码?
答案 0 :(得分:1)
chain
+ dict
+列表理解您的b
映射是一个列表列表,您可以通过chain.from_iterable
将其展平为可迭代的元组。然后输入dict
以创建有效的映射。
最后,将列表理解与dict.get
一起使用以获得期望的结果。只需记住将a
的值从str
转换为int
。
from itertools import chain
a = ['1', '2', '3', '4', '5', '6']
b = [[(1, 0.5), (2, 0.8)], [(4, 0.11), (6, 0.23)]]
b_dict = dict(chain.from_iterable(b))
c = [b_dict.get(i, 0) for i in map(int, a)]
print(c)
[0.5, 0.8, 0, 0.11, 0, 0.23]
答案 1 :(得分:0)
此操作遍历列表a
,将其值与b
列表中元组的第一个值进行比较。如果元组的第一个值与a
中的值匹配,则会将元组的第二个值附加到输出列表中:
from itertools import chain
a = ['1', '2', '3', '4', '5', '6']
b = [[(1, 0.5), (2, 0.8)], [(4, 0.11), (6, 0.23)]]
b = list(chain.from_iterable(b))
lst = []
for x in a:
for y, z in b:
if y == int(x):
lst.append(z)
break
else:
lst.append(0)
print(lst)
# [0.5, 0.8, 0, 0.11, 0, 0.23]
答案 2 :(得分:0)
您可以将映射的双重列表转换为查找字典,并使用list-comp:
a = ['1', '2', '3', '4', '5', '6']
b = [[(1, 0.5), (2, 0.8)], [(4, 0.11), (6, 0.23)]]
# convert b to a dictionary:
d = {str(k):v for tup in b for k,v in tup} # stringify the lookup key value
print(d)
# apply the lookup to a's values
result = [d.get(k,0) for k in a]
print(result)
输出:
# the lookup-dictionary
{'1': 0.5, '2': 0.8, '4': 0.11, '6': 0.23}
# result of list c,omprehension
[0.5, 0.8, 0, 0.11, 0, 0.23]
相关: