Python 字典中列表的嵌套循环

Python 字典中列表的嵌套循环,python,regex,loops,Python,Regex,Loops,我有一本字典,其中包含列表作为值: { 'List1' : ['Value1', 'Value2', 'Value3'], 'List2' : ['Value1', 'Value2', 'Value3'], 'List3' : ['Value1', 'Value2', 'Value3'], } 我想迭代每个列表的值以查找正则表达式,然后创建一个包含这些正则表达式的字典。也就是说,对于我最初的字典的每个列表。每次迭代我的列表(前一个例子中是3行)都会创建一行(总共是3行),所以我会运行一个代码来

我有一本字典,其中包含列表作为值:

{
'List1' : ['Value1', 'Value2', 'Value3'],
'List2' : ['Value1', 'Value2', 'Value3'],
'List3' : ['Value1', 'Value2', 'Value3'],
}
我想迭代每个列表的值以查找正则表达式,然后创建一个包含这些正则表达式的字典。也就是说,对于我最初的字典的每个列表。每次迭代我的列表(前一个例子中是3行)都会创建一行(总共是3行),所以我会运行一个代码来生成一个完整的唯一行

不确定这是否清楚,但它应该类似于此:

for list in dictionary:
    for value in list:
            column_list_A = []
            if re.search(regex, value):
                column_list_A.append(regex, value).group(1)
            column_list_B = []
            if re.search(regex, value):
                column_list_B.append(regex, value).group(1)
    New_Dictionary = {"column_list_A" : column_list_A, "column_list_B" : column_list_B}
    Df = pd.DataFrame.from_dict(New_Dictionary)
    for column in Df:
        #Code that puts the values of the 3 rows into 1 row
输出应如下所示:

      | Column_list_A  |  Column_list_B
----------------------------------------------------
List1 |  match object  | match object  
----------------------------------------------------
List2 |  match object  | match object  
----------------------------------------------------
List3 |  match object  | match object  
我的问题是:

1) 如何实现嵌套for循环?我尝试过使用iteritems()之类的工具,但没有得到令人满意的结果。对于每个循环,X和Y究竟应该在“for X in Y”中是什么


2) 缩进是否正确?

如果可以使用以下命令:

import re
from pprint import pprint

d = {
'List1' : ['Value1', 'Value2', 'Value3'],
'List2' : ['Value1', 'Value2', 'Value3'],
'List3' : ['Value1', 'Value2', 'Value3'],
}

col = ["column_list_A", "column_list_B", "column_list_C"]

def func(a, b, c):
    a = re.match(r'Val(ue\d)', a).group(1)
    b = re.match(r'Valu(e\d)', b).group(1)
    c = re.match(r'Value(\d)', c).group(1)
    return [a, b, c]

new_d = {i: func(*j) for i, *j in zip(col, *d.values())}

pprint(new_d)
输出:

{'column_list_A': ['ue1', 'e1', '1'],
 'column_list_B': ['ue2', 'e2', '2'],
 'column_list_C': ['ue3', 'e3', '3']}

如果您希望最终输出是一个数据帧,我建议您使用panda函数,它可以自己很好地处理循环和正则表达式,而不需要循环。下面是一个例子:

将熊猫作为pd导入
#以正确的方向阅读dict
df=pd.DataFrame.from_dict(dictionary,orient=“index”)
''#您的df将如下所示:
>>>df
0       1       2
列表1值1值2值3
列表2值1值2值3
列表3值1值2值3
'''
#将正则表达式匹配项附加到数据帧
#例如,匹配(d,e)中的任意一个,后跟一个数字
df[“匹配来自列的列”]=df[0]。str.extract(r'([de]\d'))
#例如,匹配一个数字
df[“匹配来自列的列”]=df[1].str.extract(r'(\d)]
#将输出保存为数据帧
输出=df[[匹配来自列0的列”,“匹配来自列1的列]]
''输出将如下所示:
>>>输出
匹配来自列0的列匹配来自列1的列
清单1 e1 2
清单2 e1 2
清单3 e1 2
'''
#还是口述
output_dict=output.to_dict()
'''
>>>输出指令
{'output1':{'List1':'e1','List2':'e1','List3':'e1'},
'output2':{'List1':'e2','List2':'e2','List3':'e2'}
'''
要回答您的两个问题:

  • 字典上的循环可能类似于(假设为python3):
    对于dict_键,dictionary.items()中的dict_值:
    #做任何事
    
  • 列表上方的循环可能类似于:
    对于我的_列表中的值:
    #做任何事
    
  • 您的第3-8行应该是凸出的(距离第二行4个空格用于循环缩进)

  • 按照您的方式执行(我认为更难的方式),这里有一个建议(if语句应该需要else子句+append空字符串,因为它们会导致列表长度不等?)

重新导入
对于键,在dictionary.items()中列出\u值的\u:
对于\u值列表中的值:
列_列表_A=[]
如果重新搜索(正则表达式,值):
列列表附加(重新搜索(regex,value.group)(0))
其他:
列列表附加(“”)
列_列表_B=[]
如果重新搜索(正则表达式,值):
列列表附加(重新搜索(regex,value.group)(0))
其他:
列列表附加(“”)
新字典={“列列表A”:列列表A,“列列表B”:列列表B}
Df=pd.DataFrame.from_dict(新词典)
对于Df中的列:
#做你的事
对文件的一些参考:


希望有帮助

您想将此数据作为字典或数据帧进行循环吗?我希望最终输出为数据帧您有一个正则表达式还是多个正则表达式?谢谢!我的正则表达式格式是CN~(.*?[^[u]*),但它不能作为df[0].str.extract(r'CN~(.*?[^[u]*)),你知道为什么吗?@JohannSchwaller你似乎有一个额外的右括号?我不确定你到底想要什么正则表达式,但值得检查一下你的表达式,看看它是否是你想要的