我有一个这样的字典:
colour_dict={'Red': '0xFF, 0x00, 0x00','Green':'0x00, 0xFF, 0x00','White':'0xFF, 0xFF, 0xFF','Yellow':'0xff, 0xff, 0x00'}
我需要将此字典的值传递给此代码,然后它才能正常工作:
from pptx.dml.color import RGBColor
RGBColor(0xFF, 0x00, 0x00)
当我执行以下操作以达到相同目的时:
RGBColor(colour_dict["Red"])
这是一个字符串,并且只想使用正数格式,因此抛出错误。
我已经尝试将此字符串转换为int格式,但是没有任何作用。
总体问题:
如何使用dict将值传递给RGBColor?
答案 0 :(得分:2)
colour_dict["Red"]
是字符串 "0xFF, 0x00, 0x00"
,当然不能直接将其转换为int
。
您需要转换字符串中的每一段并将这些值传递给RGBColor
构造函数:
color = RGBColor(*map(lambda v : int(v, 16), colour_dict["Red"].split(',')))
注意:该行有很多事情,所以我将其分解并解释:
colour_dict["Red"].split(',')
提取颜色值子字符串:['0xFF', '0x00', '0x00']
map()
将作为第一个参数传递的函数应用于作为第二个参数传递的iterable中的每个值。
lambda v : int(v, 16)
将v
从十六进制字符串转换为int
*
之前的 map
表示“解开后面的可迭代值”。这是一种传递带有RGB值的列表而不是调用RGBColor(R_val, G_val, B_val)
的便捷方法。
答案 1 :(得分:0)
替换
RGBColor(colour_dict["Red"])
作者
eval("RGBColor({})".format(colour_dict["Red"]))
答案 2 :(得分:0)
我发现map lambda answer
有点矫kill过正,这是一个不太理想的变体:
color = RGBColor(*[int(x,16) for x in colour_dict["Red"].split(",")])
答案 3 :(得分:0)
colour_dict [“ Red”]是一个字符串,而不是三个数字
您可以这样做:
a = list(colour_dict["Red"])
RGBColor(int(a[0]), int(a[2]), int(a[4]))
a:['0xFF',',','0x00',',','0x00'],总共5个字符