[英]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.