如果键是列表的子字符串,则创建新字典
Create new dictionary if key is substring of a list
我有以下列表和字典
lst = [
'A_blue',
'A_yellow',
'A_green',
'A_red',
'B_blue',
'B_yellow',
'B_green',
'B_red',
'C_blue',
'C_yellow',
'C_green',
'C_red'
]
dct = {'blue': 0.5, 'yellow': 0.1, 'green': 0.3, 'red': 0.8}
我想获取一个新字典,其中键是 lst
中的元素,如果键是 [=] 中元素的子字符串,则值是 dct
中的数字13=].
基本上输出是这样的:
{'A_blue': 0.5, 'A_yellow': 0.1, 'A_green': 0.3, 'A_red': 0.8, 'B_blue': 0.5, ...}
我尝试了几种方法,但只得到语法错误和其他错误;例如,
[v for k, v in dct.items() if k in e for e in lst]
给了我UnboundLocalError: local variable 'e' referenced before assignment
,我明白了。
但是我没有设法找到解决方案,尽管应该没有那么困难。
此方法遍历 dct
中的所有键,并对照 lst
中的所有值进行检查。如果它是一个子字符串,则初始化一个新键并设置 dct
中的值。
newdct = {}
for i in dct.keys():
for j in lst:
if j.find(i)!=-1:
newdct[j] = dct[i]
输出
{'A_blue': 0.5, 'B_blue': 0.5, 'C_blue': 0.5, 'A_yellow': 0.1, 'B_yellow': 0.1, 'C_yellow': 0.1, 'A_green': 0.3, 'B_green': 0.3, 'C_green': 0.3, 'A_red': 0.8, 'B_red': 0.8, 'C_red': 0.8}
试试这个:
lst = [
'A_blue',
'A_yellow',
'A_green',
'A_red',
'B_blue',
'B_yellow',
'B_green',
'B_red',
'C_blue',
'C_yellow',
'C_green',
'C_red'
]
dct = {'blue': 0.5, 'yellow': 0.1, 'green': 0.3, 'red': 0.8}
{l : dct[k] for k in dct.keys() for l in lst if k in l}
输出:
{'A_blue': 0.5,
'B_blue': 0.5,
'C_blue': 0.5,
'A_yellow': 0.1,
'B_yellow': 0.1,
'C_yellow': 0.1,
'A_green': 0.3,
'B_green': 0.3,
'C_green': 0.3,
'A_red': 0.8,
'B_red': 0.8,
'C_red': 0.8}
你可以试试听写理解
{i: dct[k] for i in lst for k in dct if k in i}
{'A_blue': 0.5,
'A_yellow': 0.1,
'A_green': 0.3,
'A_red': 0.8,
'B_blue': 0.5,
'B_yellow': 0.1,
'B_green': 0.3,
'B_red': 0.8,
'C_blue': 0.5,
'C_yellow': 0.1,
'C_green': 0.3,
'C_red': 0.8}
注意:由于 if k in i
有效地迭代 for k in dct
,正常循环可能会更快,因此最好像这样使用 break
d = {}
for i in lst:
for k in dct:
if k in i:
d[i] = dct[k]
break
print(d)
试试下面的方法
lst = [
'A_blue',
'A_yellow',
'A_green',
'A_red',
'B_blue',
'B_yellow',
'B_green',
'B_red',
'C_blue',
'C_yellow',
'C_green',
'C_red'
]
dct = {'blue': 0.5, 'yellow': 0.1, 'green': 0.3, 'red': 0.8}
result = {x: dct[x[2:]] for x in lst}
print(result)
输出
{'A_blue': 0.5, 'A_yellow': 0.1, 'A_green': 0.3, 'A_red': 0.8, 'B_blue': 0.5, 'B_yellow': 0.1, 'B_green': 0.3, 'B_red': 0.8, 'C_blue': 0.5, 'C_yellow': 0.1, 'C_green': 0.3, 'C_red': 0.8}
我有以下列表和字典
lst = [
'A_blue',
'A_yellow',
'A_green',
'A_red',
'B_blue',
'B_yellow',
'B_green',
'B_red',
'C_blue',
'C_yellow',
'C_green',
'C_red'
]
dct = {'blue': 0.5, 'yellow': 0.1, 'green': 0.3, 'red': 0.8}
我想获取一个新字典,其中键是 lst
中的元素,如果键是 [=] 中元素的子字符串,则值是 dct
中的数字13=].
基本上输出是这样的:
{'A_blue': 0.5, 'A_yellow': 0.1, 'A_green': 0.3, 'A_red': 0.8, 'B_blue': 0.5, ...}
我尝试了几种方法,但只得到语法错误和其他错误;例如,
[v for k, v in dct.items() if k in e for e in lst]
给了我UnboundLocalError: local variable 'e' referenced before assignment
,我明白了。
但是我没有设法找到解决方案,尽管应该没有那么困难。
此方法遍历 dct
中的所有键,并对照 lst
中的所有值进行检查。如果它是一个子字符串,则初始化一个新键并设置 dct
中的值。
newdct = {}
for i in dct.keys():
for j in lst:
if j.find(i)!=-1:
newdct[j] = dct[i]
输出
{'A_blue': 0.5, 'B_blue': 0.5, 'C_blue': 0.5, 'A_yellow': 0.1, 'B_yellow': 0.1, 'C_yellow': 0.1, 'A_green': 0.3, 'B_green': 0.3, 'C_green': 0.3, 'A_red': 0.8, 'B_red': 0.8, 'C_red': 0.8}
试试这个:
lst = [
'A_blue',
'A_yellow',
'A_green',
'A_red',
'B_blue',
'B_yellow',
'B_green',
'B_red',
'C_blue',
'C_yellow',
'C_green',
'C_red'
]
dct = {'blue': 0.5, 'yellow': 0.1, 'green': 0.3, 'red': 0.8}
{l : dct[k] for k in dct.keys() for l in lst if k in l}
输出:
{'A_blue': 0.5,
'B_blue': 0.5,
'C_blue': 0.5,
'A_yellow': 0.1,
'B_yellow': 0.1,
'C_yellow': 0.1,
'A_green': 0.3,
'B_green': 0.3,
'C_green': 0.3,
'A_red': 0.8,
'B_red': 0.8,
'C_red': 0.8}
你可以试试听写理解
{i: dct[k] for i in lst for k in dct if k in i}
{'A_blue': 0.5,
'A_yellow': 0.1,
'A_green': 0.3,
'A_red': 0.8,
'B_blue': 0.5,
'B_yellow': 0.1,
'B_green': 0.3,
'B_red': 0.8,
'C_blue': 0.5,
'C_yellow': 0.1,
'C_green': 0.3,
'C_red': 0.8}
注意:由于 if k in i
有效地迭代 for k in dct
,正常循环可能会更快,因此最好像这样使用 break
d = {}
for i in lst:
for k in dct:
if k in i:
d[i] = dct[k]
break
print(d)
试试下面的方法
lst = [
'A_blue',
'A_yellow',
'A_green',
'A_red',
'B_blue',
'B_yellow',
'B_green',
'B_red',
'C_blue',
'C_yellow',
'C_green',
'C_red'
]
dct = {'blue': 0.5, 'yellow': 0.1, 'green': 0.3, 'red': 0.8}
result = {x: dct[x[2:]] for x in lst}
print(result)
输出
{'A_blue': 0.5, 'A_yellow': 0.1, 'A_green': 0.3, 'A_red': 0.8, 'B_blue': 0.5, 'B_yellow': 0.1, 'B_green': 0.3, 'B_red': 0.8, 'C_blue': 0.5, 'C_yellow': 0.1, 'C_green': 0.3, 'C_red': 0.8}