【问题标题】:Creating a dictionary from a separate list of keys and values using dict comprehension in Python在 Python 中使用 dict 理解从单独的键和值列表创建字典
【发布时间】:2017-04-21 12:04:43
【问题描述】:

我和我的一个朋友今天面临一项棘手的任务,我认为值得在这里分享。

这是基础:

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]}

棘手的部分是我们只想在一行中完成。

我对您将提出的方法非常感兴趣!

【问题讨论】:

  • Stack Overflow 不是代码编写服务。
  • 试试CodeGolf

标签: python dictionary list-comprehension


【解决方案1】:

棘手的部分是我们只想在一行中完成。

您可以将几个zips 绑定在一起。

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']}

【讨论】:

  • 你能用你的线路将它们输出为lists吗?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2016-10-11
    • 2015-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-25
    相关资源
    最近更新 更多