Python 匹配后追加到列表

Python 匹配后追加到列表,python,Python,在继承别人的工作后,我遇到了一个相当随机的问题 目前有2个CSV文件正在导入python程序 1包含数字 1包含模式和站点代码 目前,他的程序将正确导入两个CSV 并检查模式是否为数字,如果是,它将打印数字、匹配的模式,然后打印站点代码 问题实际上是,他想将每个匹配项附加到一个列表中,该列表以他静态创建的站点代码命名 在谷歌搜索了很多次之后,似乎globals将成为获得所需行为的选项 i、 e: 其中范围[0]是站点代码 我似乎遇到的问题是,尽管打印时比较行工作正常,但所有数组的结果都是一样的

在继承别人的工作后,我遇到了一个相当随机的问题

目前有2个CSV文件正在导入python程序 1包含数字 1包含模式和站点代码

目前,他的程序将正确导入两个CSV 并检查模式是否为数字,如果是,它将打印数字、匹配的模式,然后打印站点代码

问题实际上是,他想将每个匹配项附加到一个列表中,该列表以他静态创建的站点代码命名

在谷歌搜索了很多次之后,似乎globals将成为获得所需行为的选项

i、 e:

其中范围[0]是站点代码

我似乎遇到的问题是,尽管打印时比较行工作正常,但所有数组的结果都是一样的

上下文的完整代码:

with open('NumPlan.csv', 'r') as f:
    mylist = []
    AEDUB = ATVIE = ATVZR = BEANT = BEBRS = BEBRU = BEMPL = CHBAS = CHLAS = CHZUR = CHWRO = CZOPA = CZPPA = DEBER = DEBSS = DEBRS = DECOL = DEDUS = DEESS = DEFBA = DEFFM = DEFRA = DEHAM = DEMUN = DENUR = DESTU = DKAAR = DKALB = DKCOP = ESBCN = ESMAD = ESMDD = ESPAL = ESVAL = FIHEL = FRBAG = FRBOR = FRLIL = FRLYN = FRMAR = FRMON = FRPRO = FRRHB = FRTOU = GBABE = GBAZT = GBBEL = GBBIR = GBBRI = GBCOL = GBEDI = GBGPH = GBGSH = GBLBS = GBLEE = GBLIV = GBLHH = GBLON = GBLWR = GBMAN = GBNOR = GBPAR = GBSMC = GBSOU = GBTRA = GBTHE = GBXWH = HUBUD = HUGUB = IEDBL = ITMIL = ITMOD = ITMVP = ITROM = ITTUR = ITMIG = LULGI = LULUX = NLAMS = NLUTR = NLDEN = NLRIK = NLROT = NLSCH = NODRO = PLWRO = PLART = PLWAA = PLWKS = PTLIS = ROBUC = RUMOS = SKBRA = SKZAM = SESTG = SESTO = SESOL = TRIST = []
    with open('Ranges.csv', 'r') as R:

     currentDDI = []
     ranges = []
     for line in f:
         li = line.split(",")
         for each in li:
             if "\\" in each:
                 currentDDI.append(each.strip())

     for line2 in R:
         Range = line2.split(",")

         for DDI in currentDDI:
             if Range[1].strip() in DDI.strip():
                 x = Range[0]
                 globals()[x].append(DDI)

     print(GBSMC)
将单个列表对象指定给一系列名称:

AEDUB = ATVIE = ATVZR = BEANT = ... = SESOL = TRIST = []
所有这些名称现在都指向同一个列表对象,而不是单独的对象,类似列表对象的值可以有多个这样的标记:

>>> AEDUB = ATVIE = ATVZR = []  # 3 names for the same list
>>> AEDUB.append('foo')  # append to the list via one name
>>> ATVIE  # and the same change is visible via another other name
['foo']
>>> ATVZR  # and another
['foo']
>>> ATVIE is ATVZR is AEDUB  # all names refer to the same object?
True
您必须为每个名称键入单独的分配:

AEDUB = []
ATVIE = []
ATVZR = []
BEANT = []
... 
SESOL = []
TRIST = []
但是,您确实希望避免使用全局列表和单独的命名列表。改用字典:

site_codes = {}

这里,dict.setdefault方法接受一个键范围[0],如果该键已经存在,则返回该键的值。如果缺少,则使用第二个参数首先在字典中设置值。因此,如果范围[0]不在字典中,则将其设置为空列表,否则将返回现有列表。.append调用然后追加到范围[0]的列表中

请注意,您永远不必实际键入所有这些名称


然后,您可以在其他地方使用site_代码['AEDUB']等来引用这些列表,或仅访问site_代码中带有for site_代码的名称序列:或访问带有for site_代码、site_代码中的值的名称和列表。值:,等等。这比使用全局名称更实用。

您希望将这些静态列表移到字典中。我认为设置list1=list2=list3是个问题。而是做一个list2=list1.copy。我以前也遇到过类似的问题,或者只是分别初始化每个列表。@Tushortz:为什么要复制空列表?@MartijnPieters为什么不?。我想你应该明白我的道理
site_codes = {}
site_codes.setdefault(Range[0], []).append(DOI)