从字典中的列表中返回值

时间:2020-10-16 23:20:40

标签: python

尝试返回字典列表中某个键的特定值。我尝试遍历项目,搜索特定的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'])的解决方案,但这在对象更改顺序等情况下并不理想。

3 个答案:

答案 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
相关问题