[英]Create a dictionary from a two dimensional list in Python
我在從列表和列表列表創建字典時遇到了一些麻煩。 這是一個例子:
a = ['a','b','c','d']
b = [[1,2,0], [3,4,1], [5,6,0], [7,8,1]]
我想要使用列表a的元素和列表b的第三個元素的輸出,如下所示:
a = {'a': 0, 'b': 1, 'c': 0, 'd': 1]
兩個列表的長度相同,因此我嘗試了類似的操作:
c = dict(zip(a,b))
但是在這種情況下,我無法選擇b的第三個元素。
在我的真實情況下,我有數百萬個數據,因此我需要一種快速,簡單的方法來完成它,並且從b創建一個臨時列表可能不是最佳解決方案。
謝謝
您可以這樣做:
dict(zip(a, (x[-1] for x in b))) # Maybe x[2] if some of the sublists have more than 3 elements.
如果您使用的是python2.x,則可能要使用itertools.izip
或future_builtins.zip
或者,在理解中使用字典:
a = ['a','b','c','d']
b = [[1,2,0], [3,4,1], [5,6,0], [7,8,1]]
c = {k: v[-1] for k, v in zip(a, b)}
參見PEP274詞典理解
我已經嘗試過了,但似乎行得通:
>>> a = ['a','b','c','d']
>>> b = [[1,2,0], [3,4,1], [5,6,0], [7,8,1]]
>>> c = dict(zip(a, [d[2] for d in b]))
>>> c
{'a': 0, 'c': 0, 'b': 1, 'd': 1}
您可以在operator
模塊中使用itemgetter
。 其中2代表b個子列表中的索引。
from operator import itemgetter
a = ['a','b','c','d']
b = [[1,2,0], [3,4,1], [5,6,0], [7,8,1]]
c = dict(zip(a, map(itemgetter(2), b)))
並且由於您有很多元素,因此itertools
可能會有助於記憶:
from operator import itemgetter
from itertools import izip, imap
a = ['a','b','c','d']
b = [[1,2,0], [3,4,1], [5,6,0], [7,8,1]]
c = dict(izip(a, imap(itemgetter(2), b)))
這些解決方案將幫助利用基礎C模塊來獲得性能優勢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.