如何从元组的有序字典中提取值,从而改变顺序



我有一个有序项目的列表,它会发生变化,我想提取列表颜色值,在本例中为[rrr,ggg,bbb]。r g和b是从0到255的颜色强度值。

这个列表可以像这个

o_list = [('d',2), ('color', {'col':[255,042,072]}), ('s',0), ('l',{'a':10, 'b':20})]

或者像这样。。。

o_list = [('color', {'col':[230,132,150]}), ('d',2), ('s',0), ('l',{'a':10, 'b':20})]

如果我使用索引位置,有时类型会是int,有时会是dict或list,或者int或tuple。

在列表[rrr,ggg,bbb]中搜索颜色并提取颜色的最快方法是什么?

我建议将列表转换为dict,然后获得颜色:

dict(o_list).get('color').get('col')

完全按照您的要求返回。

您可以使用filter().get()的组合,如下所示:

o_list = [('d',2), ('color', {'col':["050","050","050"]}), ('s',0), ('l',{'a':10, 'b':20})]
def filter_col_tuple(tup):
k,v = tup
if k == 'color':
return True
else: 
return False
filtered = filter(filter_col_tuple, o_list)
print(next(filtered)[1].get('col'))

这样做的目的是创建一个可以迭代的过滤器对象(filtered(。但是,它只有一个值,所以我们直接通过调用next()来获得第一个值。然后我们使用[1]来获得元组的第二个值,并使用.get()来获得字典中关键字"col"的值。

我假设050应该被视为一个字符串,因为它不是一个有效的整数。

额外的好处:在filter((中使用lambda也是可能的,如下所示:

o_list = [('d',2), ('color', {'col':["050","050","050"]}), ('s',0), ('l',{'a':10, 'b':20})]
filtered = filter(lambda x: x[0]=='color', o_list)
print(next(filtered)[1].get('col'))

最新更新