簡體   English   中英

如何以pythonic方式將兩個未排序的列表轉換為字典?

[英]how to convert two unsorted lists into a dictionary in a pythonic way?

我需要將兩個未排序的列表轉換為字典。 例如,我有一個全名列表:

full_name = ['taylor/swift', 'lady/gaga', 'leborn/james', 'james/harden']

我有一個姓氏列表:

last_name = ['harden', 'james', 'swift', 'smith']

我需要將這兩個列表轉換為字典:

{'harden':'james/harden', 'james':'leborn/james', 'swift':'taylor/swift'}

請注意,兩個列表的長度不相等。 更重要的是,姓氏列表中的某些元素在full_name列表中找不到。我編寫了一個python腳本來完成任務。

def index_match(full_index, last_index):
    last_valid = [s for s in last_index if any(s in xs for xs in full_index)]
    matcher = []
    for s in last_valid:
        for xs in full_index:
            if s in xs:
                matcher.append(xs)
                break
    return dict(zip(last_valid, matcher))
    
matcher = index_match(full_name, last_name)

for item in matcher.items():
    print(item)

它工作正常。 但是當列表長度增加時,程序運行緩慢。 我嘗試使用字典理解來解決問題,但出現語法錯誤。 我應該怎么做才能以更pythonic的方式編寫程序來提高速度?

full_name = ['taylor/swift', 'lady/gaga', 'leborn/james', 'james/harden']
last_name = ['harden', 'james', 'swift', 'smith']

out = {l:f for l in last_name for f in full_name if f.split("/")[1] == l}
print(out)

輸出:

{'harden': 'james/harden', 'james': 'leborn/james', 'swift': 'taylor/swift'}

使用字典理解來獲得更快的方法:

full_name = ['taylor/swift', 'lady/gaga', 'leborn/james', 'james/harden']
last_name = ['harden', 'james', 'swift', 'smith']
last_name_to_full_name = {f.split(r'/')[1]: f for f in full_name}
last_name_to_full_name = {L: last_name_to_full_name[L] for L in last_name
                          if L in last_name_to_full_name}
print(last_name_to_full_name)
# {'harden': 'james/harden', 'james': 'leborn/james', 'swift': 'taylor/swift'}

暫無
暫無

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

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