繁体   English   中英

查找列表中的字典项

[英]Finding a dictionary item that is within a list

嗨,我正在尝试找到访问列表中字典值的最佳方法,我有一个Account类,正在尝试将Customer嵌入到使用组合中。 嵌入客户后,我想将所有创建的实例附加到列表中。 最后,我想找到一种从此列表中获取每个客户的价值的方法。

当我运行accountList我得到

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

我想找到一种从此accountList访问每个客户的方法

我已经尝试过列表理解,例如[d for d in Account.accountList if 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 ,而与键'customer'相对应的值本身就是另一个dict

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

您正在使用嵌套词典,因此为了比较name键,您必须再向下一级。

如果只需要特定客户的值,则可以将dict.values用于列表dict.values ,如下所示:

[vals for vals in d.values() for d in Account.accountList if d['customer']['name'] == 'Foo']

在这种情况下,您将得到如下结果:

[{'name': 'Foo'}]
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

Account('Jenny')
Account('John')
Account('Bradley')

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM