Цикл Python For для Dict с несколькими значениями на ключ - PullRequest
0 голосов
/ 24 мая 2018

Я хочу создать Dict с 2 значениями для каждого ключа.Я не знаю, лучше ли сделать значения для каждого ключа списком или другим словарем.Но, в конечном счете, я хочу пройти по каждому ключу только один раз, а затем в цикле каждого ключа пройти по 2 элементам в значении (последовательно).

У меня есть этот код:

dic = {'%serial_number%':['SERIAL_NUMBER :: (\w+)','number'],'%sw_version%':['SW_VERSION :: HR6400 ([\d\.\-]+)','ver']}
def match_regex(text):
    for k,v in dic.iteritems():
        for v1 in v:
            print(text,k,text,v1[0],v1[1])
match_regex(df.value)

Который выводит следующее:

(Column<value>, '%sw_version%', Column<value>, 'S', 'W')
(Column<value>, '%sw_version%', Column<value>, 'v', 'e')
(Column<value>, '%serial_number%', Column<value>, 'S', 'E')
(Column<value>, '%serial_number%', Column<value>, 'n', 'u')

Вывод, который мне БЫ ХОТЕЛ, будет выглядеть так:

(Column<value>, '%serial_number%', Column<value>, 'SERIAL_NUMBER :: (\w+)', 'number')
(Column<value>, '%sw_version%', Column<value>, 'SW_VERSION :: HR6400 iDirect ([\d\.\-]+)', 'ver')

Я использую PySpark, но это не должно иметь значения,это Python 2.7.ФУНКЦИЯ должна быть общей, поэтому я хочу ссылаться на нее только по индексу, а НЕ по содержимому строки.

1 Ответ

0 голосов
/ 24 мая 2018

Нет необходимости в цикле для отображения каждого элемента в значении.

v - это просто список, который является значением для ключа k.v[0] - первый элемент значения, а v[1] - второй элемент.

dic = {'%serial_number%':['SERIAL_NUMBER :: (\w+)','number'],'%sw_version%':['SW_VERSION :: HR6400 ([\d\.\-]+)','ver']}

def match_regex(text):
    for k, v in dic.iteritems():
        print(text,k,text,v[0],v[1])

match_regex(df.value)

# (Column<value>, '%serial_number%', Column<value>, 'SERIAL_NUMBER :: (\w+)', 'number') 
# (Column<value>, '%sw_version%', Column<value>, 'SW_VERSION :: HR6400 iDirect ([\d\.\-]+)', 'ver')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...