簡體   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