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