簡體   English   中英

從2個列表創建字典

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

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