Python 查找列表中的词典项

Python 查找列表中的词典项,python,dictionary,nested-lists,Python,Dictionary,Nested Lists,您好,我正在尝试找到访问列表中的字典值的最佳方法,我有一个Account类,我正在尝试使用composition将其嵌入到客户中。嵌入客户后,我希望将创建的所有实例附加到列表中。最后,我想找到一种方法,从这个列表中获得每个客户的价值 当我运行accountList时 [{'customer':{'name':'Foo'},{'customer':{'name':'bar'}}] 我想找到一种方法来访问此帐户列表中的每个客户 我尝试了列表理解,例如[d代表Account.accountList中的

您好,我正在尝试找到访问列表中的字典值的最佳方法,我有一个Account类,我正在尝试使用composition将其嵌入到客户中。嵌入客户后,我希望将创建的所有实例附加到列表中。最后,我想找到一种方法,从这个列表中获得每个客户的价值

当我运行
accountList

[{'customer':{'name':'Foo'},{'customer':{'name':'bar'}}]

我想找到一种方法来访问此
帐户列表中的每个客户

我尝试了列表理解,例如
[d代表Account.accountList中的d,如果d[“name”]=“smith”]

但它似乎不起作用,因为我得到一个空列表作为输出[]

代码

class Customer:


  def __init__(self, name):
     self.name = name

  def __repr__(self):
     return repr(self.__dict__)

class Account:

  accountList = []
  def __init__(self, name):
    self.customer = Customer(name)
    Account.accountList.append(self)

  def __repr__(self):
    return repr(self.__dict__)

  def __getitem__(self, i):
    return i

您的列表理解很接近,但您需要再往下检查一级,因为每个列表项
d
都是一个
dict
,而与键
“客户”
对应的值本身就是另一个
dict

[d for d in Account.accountList if d['customer']['name'] == 'smith']

您使用的是嵌套字典,因此为了比较
名称
键,您必须再向下一级

如果您只需要特定客户的值,您可以在列表中使用
dict.values
,如下所示:

[vals for vals in d.values() for d in Account.accountList if d['customer']['name'] == 'Foo']
在这种情况下,您将得到如下结果:

[{'name': 'Foo'}]

好的,谢谢,听起来不错,但是当我在shell中尝试时,我得到了一个类型错误:字符串索引必须是整数。你能
打印(类型(帐户列表))
?如果它返回
str
,则您有一个JSON字符串,需要首先将其转换为Python列表。等等,我看到列表的定义位置了。getitem方法看起来合适吗?这正是我想要的,但它附带了一个名称错误:名称“d”未定义,我是否缺少一些内容请尝试以下操作:
[Account中d的VAL.accountList中d的VAL.values()如果d['customer']['name']='Foo']
此版本引发属性错误:“帐户”对象没有属性“值”
[{'name': 'Foo'}]