python - 调用一个参数每次迭代都会改变的函数[python]
问题描述
对于 python 专家来说,这可能是一件容易的事。这是我的问题:我需要过滤一个列表,由另一个包含字典的列表列表保存为 json 数组(它们是三个列表)。因此,我编写了一个具有理解列表的函数来获取过滤列表并调用它三次。问题是在每次迭代中,要过滤的列表必须是通过调用我的函数获得的最新列表,但发生的情况是,在每次迭代中,我的函数总是传递要过滤的原始列表。因此它没有正确过滤掉。问题是第一次迭代后的第一个参数(lst_to_be_filter)应该是第一个过滤器的结果,而不是始终是原始列表。我将举一个我想得到的例子:
list to be filtered:
[{"k1": 1235421901, "k2": ""}, {"k1": 729291349, "k2": "Aff"}, {"k1": 741952108, "k2": "rewuie"}]
list of lists:
[[{"k1": 1235421901, "k2": ""}, {"k1": 459291349, "k2": "eijie"}],[{"k1": 1235421901, "k2": ""}, {"k1": 948521901, "k2": "vnvju"}, {"k1": 234121901, "k2": "ppp"}], [{"k1": 935591901, "k2": "sòdodo"}, {"k1": 100021901, "k2": "ju"}, {"k1": 741952108, "k2": "rewuie"}]]
final result: [{"k1": 729291349, "k2": "Aff"}]
因此,在第一次迭代之后,我的功能删除了一个字典,在第二个迭代中什么都没有,在第三次迭代中另一个字典,这样我的最终列表只有一个字典,我必须将其保存为文件。在我的代码下面:
import json
#Function creating the filtered list
def filterlist(l_all, l_admin):
l_filtered = [j for j in l_all if j not in l_admin]
with open('userstofiltered.txt', 'r+', encoding='utf-8') as r6:
json.dump(l_filtered,r6)
return l_filtered
list_filtered = list()
listofUsers = list() # list of lists of dictionaries
with open('fil1.txt', 'r', encoding='utf-8') as r1, \
open('fil2.txt', 'r', encoding='utf-8') as r2, \
open('file3.txt', 'r', encoding='utf-8') as r3, \
open('fullList.txt', 'w', encoding='utf-8') as r4, \
open('userstofiltered.txt', 'r+', encoding='utf-8') as r5:
lst_to_be_filter = json.load(r5)
print("Pre filter:Num. users", len(lst_to_be_filter))
print("users", lst_to_be_filter)
#Create list of lists named (listofUsers )
l1 = json.load(r1)
listofUsers.append(l1)
l2 = json.load(r2)
listofUsers.append(l2)
l3 = json.load(r3)
listofUsers.append(l3)
json.dump(listofUsers, r4)
for x in range(0,len(listofUsers)):
list_filtered = filterlist(lst_to_be_filter, listofUsers[x])
解决方案
IIUC,您可以在循环list_filtered
之前初始化并始终传递给函数,如下所示:for
lst_to_be_filter
list_filtered
list_filtered = lst_to_be_filter
for x in range(0,len(liste_tipster)):
list_filtered = filterlist(list_filtered, listofUsers[x])
然后它将在每次迭代中更新。
推荐阅读
- c# - FileOpenPicker 在 Xbox One 上始终返回 null
- python - Python - 如何使函数内部使用的变量具有迭代值?
- reactjs - 第三方组件在尝试更新时将状态重置为初始值
- java - 如何在 JSP SQL Select 语句中传递来自控制器的employeeId?
- twitter-bootstrap - 折叠时看不到我的下拉按钮
- javascript - SVG 中的 ForeignObject 不起作用 - React
- javascript - 我的弹出窗口在页面顶部打开
- c++ - 覆盖虚函数不同于 C++
- sql - 如何在 SQLAlchemy 的关联表中添加一行?
- unity3d - Unity 2020.2.1f1 无标记 AR 插件