【问题标题】:Alternatives of zip to create dictionaries from lists in python 3.7从 python 3.7 中的列表创建字典的 zip 替代方案
【发布时间】:2021-06-04 10:33:58
【问题描述】:

我有一些列表并尝试将它们组合到字典中。我认为使用zip() 效果很好。但是,当我更多地使用我创建的字典时,我得出结论,从zip() 返回的元组是一个真正的问题。这种情况下的问题意味着使用来自this answer on my previous question 的代码只会创建一个空列表。到目前为止的完整代码可以看到和测试here

我的列表如下所示:

faceid = [1, 2, 3]
face_x = [15.4, 20.7, 19.3]
face_y = [9.2, 10.6, 0.0]
face_z = [0.1, 5.5, 20.4]
vertices = [[1, 2, 3], [2, 3, 4], [2, 7, 8]]

然后使用 zip 创建字典,例如:

face_and_nodes = [faceid, face_x, face_y, face_z, vertices]
face_nodes_dict = {z[0]: [z[1:]] for z in zip(*face_and_nodes)}
print("face_node_dict: ", face_nodes_dict, sep="\n")

这导致当前的输出:

face_node_dict:

{1: [(15.4, 9.2, 0.1, [1, 2, 3])], 2: [(20.7, 10.6, 5.5, [2, 3, 4])], 3: [(19.3, 0.0, 20.4, [2, 7, 8])]}

我需要的是这样的:

face_node_dict_correct:

{1: [15.4, 9.2, 0.1, [1, 2, 3]], 2: [20.7, 10.6, 5.5, [2, 3, 4]], 3: [19.3, 0.0, 20.4, [2, 7, 8]]}

我会手动编写字典,但它必须为几千个条目完成,所以这不是一个选择。

现在的问题是:如何创建我的字典而不会遇到来自 zip 的元组问题,或者是否有任何替代方案更适合我的问题?

由于过去几个小时我一直在寻找解决方案,我真的希望有人知道如何做到这一点。

【问题讨论】:

    标签: python dictionary tuples


    【解决方案1】:

    你的意思是?:

    face_nodes_dict = {z[0]: list(z[1:]) for z in zip(*face_and_nodes)}
    print(face_nodes_dict)
    

    打印:

    {1: [15.4, 9.2, 0.1, [1, 2, 3]], 
     2: [20.7, 10.6, 5.5, [2, 3, 4]], 
     3: [19.3, 0.0, 20.4, [2, 7, 8]]}
    

    【讨论】:

    • 是的,这正是我一直在寻找的......哇,现在我感觉有点崩溃了。认为使用 [z[1:]] 会产生与使用 list(z[1:]) 相同的结果。
    • @Grinnorye 不,[value]list(value) 是不同的。这是常见的错误。首先生成带有一个value 的列表,第二个迭代value 创建一个列表。
    猜你喜欢
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    • 2014-11-11
    • 1970-01-01
    • 1970-01-01
    • 2013-10-26
    • 2010-09-24
    相关资源
    最近更新 更多