Python:从两个列表构建字典[重复]

Posted

技术标签:

【中文标题】Python:从两个列表构建字典[重复]【英文标题】:Python: build a dictionary from two lists [duplicate] 【发布时间】:2017-04-27 04:29:30 【问题描述】:

由于未能以清晰的方式发布第一个问题,我将尝试更具体。 我有两个二维矩阵,一个有 5 列(我们称之为数据),另一个有 7 列(我们称之为 BMU)。让我们将 5 列子矩阵光度计和最后两列分别称为 z 和 z_err。 我想做的是,排除BMU的最后两列,计算数据对象和BMU对象之间的所有欧几里德距离,然后为每个数据对象找到最近的k个BMU对象。 (在这里我重新排列了距离矩阵,因此我无法将距离与特定的 BMU 对象相关联) 这样做后,我想在 BMU 矩阵中检索这个最接近的 k 个对象,并使用第 6 列和第 7 列来执行一些操作。 为了存储和检索我需要的所有这些信息,我试图创建某种字典。因此,当我计算距离时,我可以使用 ID 将特定距离与 Bmu 对象的特征(光度、z 和 z_err)相关联,即使我必须重新排列它们。

感谢您的帮助:)

【问题讨论】:

dict(zip(range(len(BMU)), BMU[:,:-2])) 这将创建一个字典,但我无法将测光与最后两列分开并将它们分别添加为值 【参考方案1】:

您可以使用zipdict

例子:

dictionary = dict(zip(keys, values))

【讨论】:

啊,你的更好。更简洁的符号【参考方案2】:

Sembei Norimaki 给出了完美的答案,它比我的循环更简洁。 我已经编辑了我的答案以提供一些额外的价值。

我会使用zip 函数和生成器

key: value for (key, value) in zip(keys, values)

这样做的好处是可以添加额外的条件。也许你想跳过一些键?

key: value for (key, value) in zip(keys, values) if ...

在一个循环中,这看起来像:

keys=["a", "b", "c"]
vals=[1, 2, 3]

new_dict=

for key, val in zip(keys, vals):

    # check invariants on key and value,
    # skip if the tests fail
    if not do_some_tests(key, val):
        continue
    new_dict[key]=val

【讨论】:

@downvoter 你能至少发表评论吗?

以上是关于Python:从两个列表构建字典[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中从 JSON 数据创建列表和字典 [重复]

python 使用列表理解从两个列表中的字典

python 从两个列表创建字典

Python:从两个列表到一个字典

从字典中提取第一个元素以构建列表[重复]

在Python中交换两个元素[重复]