while使用dictionary在python中使用动态列表进行循环



我有一个字典,里面有很多CSV文件中的数据,其中键是行号,值是包含列数据的列表。

我想做的是从每一行(键(的数据和第2列进行检查,我从第4列获取它的数据,然后在另一行(密钥(的第2列中查找该数据,并在第4列中获取它的值,然后继续,直到它在第2列找到第4列的最后一个值。

我的代码是:

dict_FH_coord = self.dict_FH() 
site_SI='some_site'       
list_test = [site_SI]
while len(list_test) > 0:
for ele in list_test:
for cle, val in dict_FH_coord.items():
list_test = []
if val[2] == ele:
list_test.append(val[4])
list_def.append(val)
print(val)

但该代码不起作用,因为它在第一次迭代时停止,并且它发现链接到起始site_SI的元素只有

有没有一种方法可以对列表list_test进行连续迭代,使其成为动态的来解决我的问题?

如果你想修改广播中的列表">",你必须做一些类似的事情

a = [1, 2, 3]
a[:] = [1, 2]

在你的情况下,你可以在循环中使用它的唯一方法(避免无限增加列表大小(:

if val[2] == ele:
list_test[:] = list_test[1:]+[val[4]]
list_def.append(val)
else:
list_test[:] = list_test[1:]

但它不会按预期工作,因为上一次迭代结束于索引1(for ele in list_test:(,而list_test的大小永远不会改变。

这两种情况不能相互合并。

我建议您使用Queue,但要小心避免数据中的无限链接循环:

from queue import Queue
dict_FH_coord = {
1: [0, 1, 'some_site', 3, 'some_site_2'],
2: [0, 1, 'some_site_2', 3, 'some_site_3'],
3: [0, 1, 'some_site_2', 3, 'some_site_4'],
4: [0, 1, 'some_site_3', 3, 'some_site_5'],
}
site_SI = 'some_site'
unvisited = Queue()
unvisited.put(site_SI)
list_def = list()
while not unvisited.empty():
ele = unvisited.get()
for cle, val in dict_FH_coord.items():
if val[2] == ele:
unvisited.put(val[4])
list_def.append(val)
print(val)

最新更新