考虑以下内容:
>>> # list of length n
>>> idx = ['a', 'b', 'c', 'd']
>>> # list of length n
>>> l_1 = [1, 2, 3, 4]
>>> # list of length n
>>> l_2 = [5, 6, 7, 8]
>>> # first key
>>> key_1 = 'mkt_o'
>>> # second key
>>> key_2 = 'mkt_c'
如何将这个杂乱无章的东西压缩成这样?
{
'a': {'mkt_o': 1, 'mkt_c': 5},
'b': {'mkt_o': 2, 'mkt_c': 6},
'c': {'mkt_o': 3, 'mkt_c': 6},
'd': {'mkt_o': 4, 'mkt_c': 7},
...
}
我最接近的是像这样的东西:
>>> dict(zip(idx, zip(l_1, l_2)))
{'a': (1, 5), 'b': (2, 6), 'c': (3, 7), 'd': (4, 8)}
当然,它的值是元组而不是字典。
>>> dict(zip(('mkt_o', 'mkt_c'), (1,2)))
{'mkt_o': 1, 'mkt_c': 2}
这似乎很有前途,但是再次失败了,未能满足要求。
>>> sol_1 = '{k: dict(zip(["mkt_o", "mkt_c"], v)) for k, v in zip(["a", "b", "c", "d"], zip([1, 2, 3, 4], [5, 6, 7, 8]))}' >>> sol_2 = 'dict(zip(["a", "b", "c", "d"], [{"mkt_o": i, "mkt_c": j} for i, j in zip([1, 2, 3, 4], [5, 6, 7, 8])]))' >>> sol_3 = '{k : {"mkt_o" : v1, "mkt_c" : v2} for k,v1,v2 in zip(["a", "b", "c", "d"], [1, 2, 3, 4], [5, 6, 7, 8])}' >>> timeit.timeit(sol_1, number=10000) 0.05262671899981797 >>> timeit.timeit(sol_2, number=10000) 0.02170446099989931 >>> timeit.timeit(sol_3, number=10000) 0.014590603001124691
- Jason Strimpel