我有一个字典,里面有很多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)