尝试返回字典列表中某个键的特定值。我尝试遍历项目,搜索特定的ID,但并没有完全得到我想要的结果。
{
'activeAccount': True,
'country': 'USA',
'state': 'CA',
'users': [
{
'id': 'A',
'firstName': 'Tom',
'lastName': 'Cruise',
'creditScore': '713',
'balance': '65897.22',
'debts': '12414.12',
'savings': '15231.23'
},
{
'id': 'B',
'firstName': 'Jon',
'lastName': 'Snow',
'creditScore': '648',
'balance': '12366.23',
'debts': '522',
'savings': '121588'
},
{
'id': 'C',
'firstName': 'Rick',
'lastName': 'Sanchez',
'creditScore': '655',
'balance': '556425.33',
'debts': '0',
'savings': '125122.23'
},
{
'id': 'D',
'firstName': 'Monty',
'lastName': 'Python',
'creditScore': '815',
'balance': '4512699.13',
'debts': '4.25',
'savings': '5499865.12'
}
]
}
我将如何检索某个特定值(例如,信用分数users[2]
)以返回该值?
655
我已经尝试过cScore = (dict['users'][2]['creditScore'])
的解决方案,但这在对象更改顺序等情况下并不理想。
答案 0 :(得分:2)
您必须遍历字典列表,查找ID为2的字典。然后您从该字典返回信用评分。使用此入门代码:
for account in data_base:
if account['id'] == 2:
score = account['creditScore']
break
您的根本问题是,您选择的数据表示与您的数据访问需求不符。如果您始终使用id
来引用您的帐户,则将列表更改为以该值为键的字典。如果您通过各种方式查找帐户,则需要研究一些适合您用例的数据库格式。
答案 1 :(得分:0)
'users'
的字典值是一个列表。因此,您必须遍历列表并搜索特定的ID。
这是您的操作方式。
for i in cust['users']:
if i['id'] == '2':
print (i['creditScore'])
我搜索了'id' == 'D'
。输出为815
字典定义为:
cust = {
'activeAccount': True,
'country': 'USA',
'state': 'CA',
'users': [
{
'id': 'A',
'firstName': 'Tom',
'lastName': 'Cruise',
'creditScore': '713',
'balance': '65897.22',
'debts': '12414.12',
'savings': '15231.23'
},
{
'id': 'B',
'firstName': 'Jon',
'lastName': 'Snow',
'creditScore': '648',
'balance': '12366.23',
'debts': '522',
'savings': '121588'
},
{
'id': 'C',
'firstName': 'Rick',
'lastName': 'Sanchez',
'creditScore': '655',
'balance': '556425.33',
'debts': '0',
'savings': '125122.23'
},
{
'id': 'D',
'firstName': 'Monty',
'lastName': 'Python',
'creditScore': '815',
'balance': '4512699.13',
'debts': '4.25',
'savings': '5499865.12'
}
]
}
答案 2 :(得分:0)
如果您需要在用户列表中按ID查找用户,则可以使用filter
函数:
dict = {
'activeAccount': True,
'country': 'USA',
'state': 'CA',
'users': [
{
'id': 'A',
'firstName': 'Tom',
'lastName': 'Cruise',
'creditScore': '713',
'balance': '65897.22',
'debts': '12414.12',
'savings': '15231.23'
},
{
'id': 'B',
'firstName': 'Jon',
'lastName': 'Snow',
'creditScore': '648',
'balance': '12366.23',
'debts': '522',
'savings': '121588'
},
{
'id': 'C',
'firstName': 'Rick',
'lastName': 'Sanchez',
'creditScore': '655',
'balance': '556425.33',
'debts': '0',
'savings': '125122.23'
},
{
'id': 'D',
'firstName': 'Monty',
'lastName': 'Python',
'creditScore': '815',
'balance': '4512699.13',
'debts': '4.25',
'savings': '5499865.12'
}
]
}
# get the user with ID:"D"
user = list(filter(lambda u: u["id"] == "D", dict["users"]))[0]
# get the value
cScore = user["creditScore"] # <-- Output: 815
lambda u: u["id"] == "D"
的意思是:如果给定元素的属性“ id”为“ D”,则返回True。
可以将其重写为普通函数:
def check_D(user):
return user["id"] == "D"
user = list(filter(check_D, dict["users"]))[0]
filter( <condition> , dict["users"])
的意思是:遍历列表dict["users"]
并返回所有符合条件的元素(在这种情况下为“ lambda”,或者可以是任何返回True或False的函数)
user = list( ... )[0]
因为过滤器函数返回一个对象,所以需要将该对象转换为列表并获取列表的第一个元素。
您可以使用条件(id ==“ D”)构建列表理解并获取列表的第一个元素:
creditScore = [usr["creditScore"] for usr in dict["users"] if usr["id"] == "D"][0]
print(creditScore) # <-- Output: 815