我和我的一位朋友今天面临着一项棘手的任务,我认为值得在这里分享。
这是基础:
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]}
棘手的部分是我们只想在一行中完成它。
我对你提出的方法非常感兴趣!
答案 0 :(得分:1)
棘手的部分是我们只想在一行中完成。
你可以把几个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']}
答案 1 :(得分:0)
如何使用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