簡體   English   中英

在Python中從二維列表創建字典

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

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