简体   繁体   English

给定两个字符串列表,如何将它们转换为dict?

[英]Given two list of strings, how can I convert them into a into a dict?

I have the following list of strings: 我有以下字符串列表:

content = [['a list with a lot of strings and chars 1'], ['a list with a lot of strings and chars 2'], ['a list with a lot of strings and chars 3'], ['a list with a lot of strings and chars 4']]

labels = ['label_1','label_2','label_3','label_4']

How can I create a dictionary from them: 如何从他们创建字典:

{
'label_1': ['a list with a lot of strings and chars 1']
'label_2': ['a list with a lot of strings and chars 2']
'label_3': ['a list with a lot of strings and chars 3']
'label_4': ['a list with a lot of strings and chars 4']
}
dictionary = dict(zip(labels, content))

Various versions: 各种版本:

def f1(labels, content):
    return dict(zip(labels, content))

def f2(labels, content):
    d = {}

    for i, label in enumerate(labels):
        d[label] = content[i]
    return d

def f3(labels, content):
    d = {}
    for l, c in zip(labels, content):
        d[l] = c
    return d

def f4(labels, content):
    return {l : c for (l, c) in zip(labels, content)}

def f5(labels, content):
    dictionary = {}

    for i in range(len(content)):
       dictionary[labels[i]] = content[i]
    return dictionary

def f6(labels, content):
    return {l : content[i] for (i, l) in enumerate(labels)}

Timing 定时

These are tested using Python 3.6.7 . 这些已使用Python 3.6.7进行了测试。 Note that different versions of Python might have different performance, so you should probably re-run the benchmarks on your intended platform. 请注意,不同版本的Python可能具有不同的性能,因此您可能应该在预期的平台上重新运行基准测试。

In [20]: %timeit f1(labels, content)
637 ns ± 4.17 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

In [21]: %timeit f2(labels, content)
474 ns ± 4.44 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

In [22]: %timeit f3(labels, content)
447 ns ± 2.76 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

In [23]: %timeit f4(labels, content)
517 ns ± 4.44 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

In [24]: %timeit f5(labels, content)
529 ns ± 8.04 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

In [4]: %timeit f6(labels, content)
602 ns ± 0.64 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

Fastest 最快的

Fastest is f3 , a modification of the answer by @Michael_MacAskill to use zip instead of using the index to extract the value from content . 最快的是f3 ,这是@Michael_MacAskill对答案的修改,使用zip而不是使用索引从content提取值。

Interestingly, a dictionary comprehension of @Michael_MacAskill 's answer did not perform better than the one using plain for-loops. 有趣的是,对@Michael_MacAskill的答案的字典理解并没有比使用普通for循环的字典表现更好。 Perhaps the implementers of the language realized that people still stuck with for-loops most of the time and implemented some performance hack for them. 也许这种语言的实现者意识到人们在大多数时间仍然坚持使用for循环,并为他们实施了一些性能改进。

Most Pythonic 大多数Pythonic

Most experienced Python programmers will probably go with the dict(zip(labels, content)) option if the differences in speed is not critical since it is a common idiom in the language. 如果速度差异不是很关键,因为它是该语言的通用用法,那么最有经验的Python程序员可能会选择dict(zip(labels, content))选项。

dictionary = {} for i in range(len(content)): dictionary[labels[i]] = content[i] #setting each element in labels list as key and each corresponding index of content list's content as value

Maybe this could be done more efficiently with a dictionary comprehension but here is a quick and dirty way: 也许可以通过字典理解来更有效地完成此操作,但这是一种快速而肮脏的方法:

d = {}                                                                                                                

for i, label in enumerate(labels): 
    d[label] = content[i] 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM