[英]Create dictionary from 2 lists
我的任務:我有2個列出不同大小的列表(例如1,2,3,4和“ qwe”,“ asd”,“ zxc”)。 我如何用下一個條件使用此列表創建字典:如果鍵數大於值,則dict [key] = None。 如果更多的是計數值,那就定額。 我的代碼:
list1=[1,2,3,4]
list2=["qwe","asd","zxc"]
dictx={}
for x in range(len(list1)):
if x>len(list2):
dictx[list1[x]]=None
else:
dictx[list1[x]]=list2[x]
但是我發現了錯誤:Traceback(最近一次調用):dictx [list1 [x]] = list2 [x]中的文件“”,第5行,IndexError:列表索引超出范圍我在哪里出錯?Python 3.4 Upd.It工作,但我嘗試了解此代碼中的錯誤之處。 有人想過嗎?
您還可以按以下方式使用itertools.izip_longest :
import itertools
list1=[1,2,3,4]
list2=["qwe","asd","zxc"]
print ({l1:l2 for l1,l2 in itertools.izip_longest(list1,list2,fillvalue=None)})
編輯:在python 3:
import itertools
list1=[1,2,3,4]
list2=["qwe","asd","zxc"]
print ({l1:l2 for l1,l2 in itertools.zip_longest(list1,list2,fillvalue=None)})
輸出:
{1: 'qwe', 2: 'asd', 3: 'zxc', 4: None}
使用itertools.chain
和itertools.repeat
將值列表填充為None
,然后壓縮列表:
from itertools import chain, repeat
d = dict(zip(list1, chain(list2, repeat(None))))
repeat(None)
是一個無限迭代器,可永遠產生None
。
chain(list2, repeat(None))
是一個迭代器,它從list2
產生項,然后在list2
用盡時產生None
。
zip(...)
從list1
和填充的list2
返回一對對應元素的列表。 當任何輸入用完時zip
停止,因此輸入的長度與list1
。
最后, dict(...)
獲取鍵值對的列表,並使用與這些值相對應的鍵進行dict。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.