как извлечь значение из упорядоченного словаря кортежей, которое меняет порядок - PullRequest
1 голос
/ 03 августа 2020

У меня есть список заказанных элементов, который меняется, и я хочу извлечь значение цвета списка, которое в данном случае равно [rrr, ggg, bbb]. rg и 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] и извлечь его?

Ответы [ 2 ]

1 голос
/ 03 августа 2020

Я бы предложил преобразовать список в dict, а затем получить цвет:

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

возвращает именно то, что вы просили.

0 голосов
/ 03 августа 2020

Вы можете использовать комбинацию 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 (), например:

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'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...