class dataFilter:
构造函数
def __init__(self, data_dict):
self.filtered_data = []
self.data_dict = data_dict
self.age_group = ""
self.gender = ""
self.period = ""
self.migration_background = ""
def filteredData(self, age_group, gender, period, migration_background):
self.age_group = age_group
self.gender = gender
self.period = period
self.migration_background = migration_background
问题是这个if语句。由于某种原因,我找不到另一种方法:
for key in self.data_dict["value"]:
if key["Leeftijd"] == self.age_group and key["Geslacht"] == self.gender and key["Perioden"] == self.period and key["Migratieachtergrond"] == self.migration_background:
self.filtered_data.append(key)
return self.filtered_data
错误消息
如果key [“ Leeftijd”] == self.age_group和key [“ Geslacht”] == self.gender和key [“ Perioden”] == self.period和key [“ Migratieachtergrond”] == self。 migration_background: TypeError:字符串索引必须为整数
预期输入
age = "80007"
gender = "T001038"
period = "2000SJ00"
migrationbackground = "T001040"
预期的输出:返回列表后,它将立即打印到这样的屏幕上。
{'1198188', 'T001038', '80007', 'T001040', '2000SJ00'},
{'1198189', 'T001038', '80007', 'T001040', '2000SJ00'},
{'1198190', 'T001038', '80007', 'T001040', '2000SJ00'},
{'1198191', 'T001038', '80007', 'T001040', '2000SJ00'},
{'1198192', 'T001038', '80007', 'T001040', '2000SJ00'}
这是我使用的词典的一小部分。它真的很大,所以我没有包括全部内容,但这就是它的样子
{
"value": {
"288": {
"ID": 288,
"Geslacht": "T001038",
"Leeftijd": "80007 ",
"Migratieachtergrond": "T001040",
"RegioS": "PV31 ",
"Perioden": "2000SJ00",
"Hbo_8": " 0"
},
"289": {
"ID": 289,
"Geslacht": "T001038",
"Leeftijd": "80007 ",
"Migratieachtergrond": "T001040",
"RegioS": "PV31 ",
"Perioden": "2001SJ00",
"Hbo_8": " 0"
},
"290": {
"ID": 290,
"Geslacht": "T001038",
"Leeftijd": "80007 ",
"Migratieachtergrond": "T001040",
"RegioS": "PV31 ",
"Perioden": "2002SJ00",
"Hbo_8": " 0"
},
"291": {
"ID": 291,
"Geslacht": "T001038",
"Leeftijd": "80007 ",
"Migratieachtergrond": "T001040",
"RegioS": "PV31 ",
"Perioden": "2003SJ00",
"Hbo_8": " 0"
},
"292": {
"ID": 292,
"Geslacht": "T001038",
"Leeftijd": "80007 ",
"Migratieachtergrond": "T001040",
"RegioS": "PV31 ",
"Perioden": "2004SJ00",
"Hbo_8": " 0"
},
"293": {
"ID": 293,
"Geslacht": "T001038",
"Leeftijd": "80007 ",
"Migratieachtergrond": "T001040",
"RegioS": "PV31 ",
"Perioden": "2005SJ00",
"Hbo_8": " 0"
}
}
}
答案 0 :(得分:0)
此错误的基本含义是,您在for循环中使用的键是字符串,并且您正在通过传递字典键来考虑将其视为字典,但是字符串具有整数索引 因此,请重新检查您的字典并相应地运行循环
答案 1 :(得分:0)
问题出在
for key in self.data_dict["value"]:
# the type of key is `str`
例如,
print([key for key in self.data_dict["value"]])
# It prints ['288', '289', '290', '291', '292', '293']
您可以改为执行以下操作
for key, nested_obj in self.data_dict["value"].items():
if (
nested_obj["Leeftijd"] == self.age_group
and nested_obj["Geslacht"] == self.gender
and nested_obj["Perioden"] == self.period
and nested_obj["Migratieachtergrond"] == self.migration_background
):
self.filtered_data.append(key
不过,请注意,您输入的内容带有尾随空格(例如"80007 " != "80007"
)。您需要先清理空间。