簡體   English   中英

創建一個迭代兩個列表的字典

[英]Create a dictionary iterating two lists

我正在構建這個字典,它的值是動物出現的列表的索引。

我有這兩個列表:

list1 = ['cow', 'fish', 'monkey', 'lion', 'cat', 'elephant', 'tiger', 'dog']
list2 = [[['dog', 'cat', 'elephant', 'monkey'], ['dog', 'lion', 'tiger'], ['fish', 'dog', 'dog', 'cat', 'cow']]

遍歷它們,我正在構建我的字典

dict = {}

for i in list1:
    for index, item in enumerate(list2):
        if i in item:
            if i in dict.keys():
                dict[i].append(index)
        else:
            dict[i] = index

問題是:當它在字典鍵中找到一個已經存在的項目時,而不是僅僅將索引添加到值集中它給了我這個錯誤

dict[i].append(index)

AttributeError: 'int' object has no attribute 'append'

預期的 output 應該是:

dict = {'cow':[2], 'cat':[0,2], 'fish':[2], 'dog':[0,2], 'monkey':[0], 'lion':[1], 'elephant':[0], 'tiger':[1]}

除了縮進問題,您需要第一次創建一個列表。 目前,您將其分配為元素,因此append()將不起作用。

list1 = ['cow', 'fish', 'monkey', 'lion', 'cat', 'elephant', 'tiger', 'dog']
list2 = [
            ['dog', 'cat', 'elephant', 'monkey'], 
            ['dog', 'lion', 'tiger'], 
            ['fish', 'dog', 'dog', 'cat', 'cow']
        ]

dct = {}
for i in list1:
    for index, item in enumerate(list2):
        if i in item:
            if i in dct.keys():
                dct[i].append(index)
            else:
                dct[i] = [index]
    

Output:

{'cow': [2], 'fish': [2], 'monkey': [0], 'lion': [1], 'cat': [0, 2], 'elephant': [0], 'tiger': [1], 'dog': [0, 1, 2]}

此外,不要對 object 名稱使用dict()以避免過度遮蔽內置對象。

您還可以使用setdefault擺脫if-else邏輯:

dct = {}
for i in list1:
    for index, item in enumerate(list2):
        if i in item:
            dct.setdefault(i, []).append(index)

以下可能是確保使用集合刪除重復項的單行解決方案:

d = {a: set(d.get(a, []) + [i]) for i, l in enumerate(list2) for a in l if a in list1}
print(d)

這是 output:

{
    'dog': {0, 1, 2},
    'cat': {0, 2},
    'elephant': {0},
    'monkey': {0},
    'lion': {1},
    'tiger': {1},
    'fish': {2},
    'cow': {2},
}

暫無
暫無

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

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