簡體   English   中英

如何將元組列表轉換為字典

[英]How do I convert a list of tuples to a dictionary

我有一個元組列表,如下所示:

lst_of_tpls = [(1, 'test2', 3, 4),(11, 'test12', 13, 14),(21, 'test22', 23,24)]

我想將它轉換為字典,使它看起來像這樣:

mykeys = ['ones', 'text', 'threes', 'fours']
mydict = {'ones': [1,11,21], 'text':['test2','test12','test22'], 
          'threes': [3,13,23], 'fours':[4,14,24]}

我試圖像這樣枚舉lst_of_tpls

mydict = dict.fromkeys(mykeys, [])
for count, (ones, text, threes, fours) in enumerate(lst_of_tpls):
    mydict['ones'].append(ones)

但是這使得我希望在'ones'中看到的值也在其他“類別”中:

{'ones': [1, 11, 21], 'text': [1, 11, 21], 'threes': [1, 11, 21], 'fours': [1, 11, 21]}

另外,我想保持mykeys靈活性。

您可以應用兩次zip以找到正確的配對:

lst_of_tpls = [(1, 'test2', 3, 4),(11, 'test12', 13, 14),(21, 'test22', 23,24)]
mykeys = ['ones', 'text', 'threes', 'fours']
new_d = {a:list(b) for a, b in zip(mykeys, zip(*lst_of_tpls))}

輸出:

{
 'ones': [1, 11, 21],
 'text': ['test2', 'test12', 'test22'],
 'threes': [3, 13, 23],
 'fours': [4, 14, 24]
}

你可以傳遞給(key,value)的dict元組,它比使用字典理解快兩倍

lst_of_tpls = [(1, "test2", 3, 4), (11, "test12", 13, 14), (21, "test22", 23, 24)]
mykeys = ["ones", "text", "threes", "fours"]
my_dict = dict(zip(mykeys, zip(*lst_of_tpls)))

輸出:

{'ones': (1, 11, 21),
 'text': ('test2', 'test12', 'test22'),
 'threes': (3, 13, 23),
 'fours': (4, 14, 24)}

Profiler示例:

lst_of_tpls = [(1, "test2", 3, 4), (11, "test12", 13, 14), (21, "test22", 23, 24)]
mykeys = ["ones", "text", "threes", "fours"]


def dict_comprehension():
    return {a: list(b) for a, b in zip(mykeys, zip(*lst_of_tpls))}


def dict_generator():
    return dict(zip(mykeys, zip(*lst_of_tpls)))


if __name__ == "__main__":
    import timeit

    funcs = (dict_comprehension, dict_generator)
    for f in funcs:
        result = timeit.timeit(f, number=10000, globals=globals())
        print(f"{f.__name__}: {result:.5f}")


dict_comprehension: 0.05009 
dict_generator: 0.02468

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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