簡體   English   中英

遍歷字典列表,將包含關鍵字的字典放入新列表

[英]Iterate through a list of dicts, placing dicts containing a keyword into a new list

我在 Python 中有一個字典列表,在列表中稱為“角色”,字典如下所示:

dict = {"roleName":DisplayName, "accountNumber" : acctNumber} // Info pulled from variables
eg. roles[0] = {"roleName":JSmith, "accountNumber" : 123456}

當我從 API (以及其他處理)中提取此信息時,如果發生任何錯誤(沒有數據或未通過完整性檢查),則添加此短語而不是信息

“錯誤:XXXXXXXXXXXX”

例如: roles[0] = {"roleName":JSmith, "accountNumber": "ERROR: NO ID DATA"}

我想要做的是 go 通過“角色”並拉出(因此刪除)其值中包含“錯誤:”的任何字典並將其放入另一個名為“errorList”的字典列表中

因此,角色將只有不包含“錯誤:XXXXXXXX”的字典,而 errorList 將包含所有包含“錯誤:XXXXX”的字典

我試過這樣的事情:

for i in roles:
       if "ERROR:" in (repr((i.values()))):
            errorList.append(i)
            roles.remove(i)

所以基本上將字典中的所有值(在角色 [i] 處)作為字符串轉儲並尋找“錯誤:”。 如果它有那個短語,那么它將被附加到另一個列表並被刪除。

當我查看這兩個列表時,似乎在原始列表中還有一些剩余的字典(帶有錯誤:)。 我也試過:

 for i in roles:
        if "ERROR:" in (repr((i.values()))):
            errorList.append(i)
 for i in roles:
       if "ERROR:" in (repr((i.values()))):
           roles.remove(i)

進行兩次傳球,但結果相同。

最好的方法是什么?

PS我可能有更多在示例字典中顯示的鍵,所以如果可能的話,我想避免檢查每個鍵:值對並且一次檢查所有值。

我的錯誤是我正在使用原始列表,因此它導致了意外行為 - 在列表之間移動 Python 元素

這通過使用“角色”的副本來工作

for i in roles[:]:
        if "ERROR:" in (repr((i.values()))):
            errorList.append(i)
            roles.remove(i)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM