Python:从两个列表构建一个字典

Bra*_*ita 4 python arrays dictionary python-2.7

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

谢谢你的帮助 :)

Sem*_*aki 11

你可以使用zipdict

例:

dictionary = dict(zip(keys, values))
Run Code Online (Sandbox Code Playgroud)


lhk*_*lhk 5

Sembei Norimaki提供了完美的答案,它比我的循环更简洁。我已经对答案进行了编辑,以提供其他附加值。

我会使用zip函数和一个生成器

{key: value for (key, value) in zip(keys, values)}
Run Code Online (Sandbox Code Playgroud)

这样的好处是您可以添加其他条件。也许您想跳过一些键?

{key: value for (key, value) in zip(keys, values) if ...}
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)