使用Python中的词典理解创建一个单独的键和值列表中的词典
问题描述:
我和我的一个朋友今天面临着一项棘手的任务,我认为在这里值得分享。使用Python中的词典理解创建一个单独的键和值列表中的词典
这是基础:
keys = ["name", "surname", "age"]
values = ['John Miller 20',
'James Smith 30',
'Gary Jones 50'
]
d = {}
我们想创建一个字典的格式如下:
{'name': ['John', 'James', 'Gary'],
'surname': ['Miller', 'Smith', 'Jones'],
'age': [20, 30, 50]}
棘手的部分是,我们希望做它只有一条线。
我对你会想到的方法很感兴趣!
答
棘手的部分是我们想只做一行。
您可以将几个zip
连接在一起。
d = dict(zip(keys, list(zip(*[value.split() for value in values]))))
如果你现在要做的print(d)
它会输出:
{'name': ('John', 'James', 'Gary'), 'surname': ('Miller', 'Smith', 'Jones'), 'age': ('20', '30', '50')}
当然,这是假设value.split()
总会导致3倍的值。
编辑:如果你想在元组是列表,则抛出list(a) for a in ...
混进去:
d = dict(zip(keys, list(list(a) for a in zip(*[value.split() for value in values]))))
,输出:
{'name': ['John', 'James', 'Gary'], 'surname': ['Miller', 'Smith', 'Jones'], 'age': ['20', '30', '50']}
答
有关使用numpy
如何?
import numpy as np
d = dict(zip(keys, np.array([i.split() for i in values]).transpose().tolist()))
{'age': ['20', '30', '50'],
'name': ['John', 'James', 'Gary'],
'surname': ['Miller', 'Smith', 'Jones']}
基准:看起来像@此Vallentin的答案是更快
time d = dict(zip(keys, list(zip(*[value.split() for value in values]))))
CPU times: user 23 µs, sys: 1 µs, total: 24 µs
Wall time: 29.1 µs
time d = dict(zip(keys, np.array([i.split() for i in values]).transpose().tolist()))
CPU times: user 41 µs, sys: 6 µs, total: 47 µs
Wall time: 47.9 µs
Stack Overflow是不是代码写作服务。 – Vallentin
尝试[CodeGolf](https://codegolf.stackexchange.com/) – GiantsLoveDeathMetal