Python For Dict循环,每个键有多个值

时间:2018-05-24 17:02:24

标签: python python-2.7 pyspark

我想创建一个每个键有2个值的Dict。我不知道是否最好将每个Key的值设为List或其他Dictionary。 但是,最终我想只遍历每个Key一次,然后在每个键的循环内循环遍历Value中的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 :(得分:1)

不需要循环来显示值中的每个项目。

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')