Как отфильтровать значения списка из соответствующих имен индексов, расположенных в списке? - PullRequest
1 голос
/ 31 марта 2020

У меня, как мне кажется, тривиальный вопрос, но я не могу найти самое простое решение. У меня есть список списков:

Example_list=[[['MAX_BID', '€9'], ['BID_NUMBER', 10], ['DATE', '2017-01-25 20:10:33 UTC'], ['SHIPPING_COST', '17.90']], 
[['MAX_BID', '€165'], ['BID_NUMBER', 30], ['DATE', '2017-01-25 20:12:01 UTC'], ['SHIPPING_COST', '16.00']]]

Теперь я просто хочу отфильтровать значение для BID_NUMBER во втором списке. Очевидно, что следующие работы:

>>> print(test[1][1][1])
30

К сожалению, это не будет решением, так как реальный случай имеет списки различного размера, приводящие к различным местоположениям для желаемого значения списка.

У меня также есть попробовал следующее, но кажется, что это не самое простое решение:

for i in test[1]:
    for p in i:
        if "BID_NUMBER" in p:
            print(p[1])
30

Есть ли более элегантное решение?

1 Ответ

1 голос
/ 31 марта 2020

Если все подсписки в каждом непосредственном подсписке являются парами ключ-значение, вы можете преобразовать включающий список в dict перед доступом к BID_NUMBER в качестве ключа:

for d in map(dict, test):
    print(d['BID_NUMBER'])

В противном случае, если глубина таких подсписков пар ключей не согласована, вы можете использовать while l oop, чтобы продолжить поиск внутреннего подсписка в блоке except после попытки преобразовать подсписок в try блок:

for l in test:
    while True:
        try:
            d = dict(l)
            break
        except ValueError:
            l = l[0]
    print(d['BID_NUMBER'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...