我有一個字串串列:
ignore_list = ["new job", "encountered error", "SLA"]
和字典串列:
ticket_list =
[{"Title": "new job to action", "Level": "2", "url":"www.example.com"},
{"Title": "job SLA not met", "Level": "4", "url":"www.blabla.com"},
{"Title": "precheck failure", "Level": "1", "url":"www.halp.com"},
{"Title": "is anyone there", "Level": "1", "url":"www.hello.com"},
{"Title": "please update ticket", "Level": "4", "url":"www.asdfadf.com"},
{"Title": "provision assistance", "Level": "2", "url":"www.test.com"},
{"Title": "encountered error on job", "Level": "2", "url":"www.lkjlkj.com"}]
我正在嘗試遍歷字典鍵 ['Title'] 中是否存在任何字串ignore_list以及ticket_list是否存在任何字串。ignore_list將它們附加到新串列中。
action_tickets_list = []
for string in ignore_list:
for ticket in ticket_list:
if string not in ticket['Title']:
action_tickets_list.append(ticket)
print(action_tickets_list)
發生的事情是我action_tickets_list通過我的ignore_list.
是否有首選或最佳實踐來迭代字串串列并檢查它們是否存在于特定的字典鍵(在本例中為['Title']鍵)中?我有一種感覺,使用in或not in不是一個理想的解決方案?
我的目標是必須包含標題鍵中action_tickets_list沒有字串的字典。ignore_list
這已經困擾了我一段時間,并且沒有找到解決方案的運氣 - 非常感謝任何幫助。上面的代碼只是我目前擁有的偽代碼,但我希望它足以理解我的目標。提前致謝
uj5u.com熱心網友回復:
另一種選擇是用和生成器運算式替換您的ignore_list迭代器。any()
例如,使用集合推導:
action_tickets_list = set(ticket['Title'] for ticket in ticket_list if not any(s in ticket['Title'] for s in ignore_list))
它類似于
action_tickets_list = set()
for ticket in ticket_list:
if not any(s in ticket['Title'] for s in ignore_list):
action_tickets_list.add(ticket['Title'])
如果你有一個很大的ignore_list,編譯一個ignore_list 的正則運算式可能是值得的。這意味著您只掃描一次。
import re
ignore = re.compile('|'.join(ignore_list))
action_tickets_list = set()
for ticket in ticket_list:
if not ignore.search(ticket['Title']):
action_tickets_list.add(ticket['Title'])
uj5u.com熱心網友回復:
對于 中的每個元素ignore_list,檢查中的每個元素ticket_list;如果ticket_list['Title']不包含 中的元素ignore_list,則將其添加到action_tickets_list.
因此,對于 中的每個元素ignore_list,我們都有 中的每個元素ticket_list,因此您會看到重復項。
正確的順序應該如下:
action_tickets_list = []
for ticket in ticket_list:
if not any(map(lambda ignore: ignore in ticket['Title'], ignore_list)):
action_tickets_list.append(ticket)
print(action_tickets_list)
uj5u.com熱心網友回復:
查看您提供的代碼,
action_tickets_list = []
for string in ignore_list:
for ticket in ticket_list:
if string not in ticket['Title']:
action_tickets_list.append(ticket)
列印(action_tickets_list)
線
action_tickets_list.append(ticket)
每次 ignore_list 中的字串之一不存在于檢查的字典的“標題”槽中時呼叫。如果“標題”字串不包含 ignore_list 中的更多字串,這將導致重復條目。
如果您的目標是在字典的“標題”字串中不存在忽略串列中的任何一個條目時包含字典,您可以在外部回圈中迭代字典串列并在內部回圈中迭代字串,設定如果任何一個字串不存在,則為布林值。
action_tickets_list = []
for ticket in ticket_list:
include = false
for str in ignore_list:
if str not in ticket:
include = true
if include:
action_ticket_list.append(ticket)
此解決方案可能會解決您的問題。
將您的票證放入用戶定義的票證類中,每個條目的成員變數而不是使用字典也可能是有意義的。它可能會提高可讀性并更容易避免錯誤。
這個類可能看起來像這樣
class Ticket:
def __init__(self, title, level, url):
self.title = title
self.level = level
self.url = url
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/475457.html
