我想根据不等于条件向字典提供十六进制颜色代码。我有以下数据:
my_list = [1,3,5]
my_dict = {0 : '#a2bd62', 1 : '#9930ad', 2 : '#41c65d', 3 : '#9359d9', 4 : '#4667e6', 5 : '#c95eda'}
现在,对于不在my_list中的所有字典键,我希望该特定键/值对的值是:'#A9A9A9'
。
我当前的解决方案是遍历列表中的所有项目,然后遍历所有键,但是该解决方案存在缺陷,因为我的字典中的所有值最终都是'#A9A9A9'
:
for item in my_list:
for key,value in my_dict.items():
if item != key:
my_dict[key] = '#A9A9A9'
有人能够提供解决方案吗?
答案 0 :(得分:1)
您应该首先遍历my_dict.items()
而不是my_list
,请注意,您只想检查给定键是否为列表中的in
(使用in
运算符! )
所以这是使用字典理解的一种方法:
my_set = set([1,3,5])
my_dict = {0 : '#a2bd62', 1 : '#9930ad', 2 : '#41c65d', 3 : '#9359d9',
4 : '#4667e6', 5 : '#c95eda'}
{k:v if k in my_set else '#A9A9A9' for k,v in my_dict.items()}
# {0: '#A9A9A9', 1: '#9930ad', 2: '#A9A9A9', 3: '#9359d9', 4: '#A9A9A9', 5: '#c95eda'}
或使用常规的for
循环:
d = {}
for k,v in my_dict.items():
if k in my_set:
d[k] = v
else:
d[k] = '#A9A9A9'
答案 1 :(得分:1)
您可以在键和my_list
之间进行设置区别:
my_list = [1,3,5]
my_dict = {0 : '#a2bd62', 1 : '#9930ad', 2 : '#41c65d', 3 : '#9359d9', 4 : '#4667e6', 5 : '#c95eda'}
val = '#A9A9A9'
for k in set(my_dict.keys()).difference(my_list):
my_dict[k] = val
这是O(M)时间复杂度方法(其中M是my_lsit
中不在的键的数量),比从列表{ {1}}
答案 2 :(得分:0)
这项工作:
select t.id, v.*
from t cross apply
(values ('Req 1', Req1, Req1Comment),
('Req 2', Req2, Req2Comment),
. . .
) v(requirement, status, comments);