我对为什么一直得到KeyError感到很困惑:无,我想让用户输入一个Name(例如Lisbon)并在JSON文件(例如Jade,John)中返回其他用户,这些用户属于与用户输入的国家(例如,里斯本)相同,我有一个JSON文件,如下所示:
{
"user1":{
"Country":[
"China",
"USA",
"Nepal"
],
"Name":[
"Lisbon"
]
},
"user2":{
"Country":[
"Sweden",
"China",
"USA"
],
"Name":[
"Jade"
]
},
"user3":{
"Country":[
"India",
"China",
"USA"
],
"Name":[
"John"
]
}
}
这是我的代码
userName = raw_input("Enter user's name: ")
with open('listOfUsers.json') as f:
data = json.load(f)
def getId(name):
for userId, v in data.items():
if v['Name'] == name:
return userId;
id = getId(userName)
for k, v in data.items():
if any(x in data[id]['Country'] for x in v['Country']):
print(k)
我该如何解决这个问题?
答案 0 :(得分:3)
您的getId
函数始终返回None。这是因为if v['Name'] == name:
将永远不会成功。 v['Name']
是一个列表,name
是一个字符串,并且列表和字符串永远不会比较相等。
如果可能,请修改json文件的格式,以使Name值为字符串,而不是字符串列表。
"user1":{
"Country":[
"China", "USA", "Nepal"
],
"Name": "Lisbon"
},
//etc
如果这不可能,请修改getId
,以便检查列表的第一个元素。
def getId(name):
for userId, v in data.items():
if v['Name'][0] == name:
return userId