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