【问题标题】:Key that maps to List in Python Dictionary映射到 Python 字典中的 List 的键
【发布时间】:2016-05-31 06:44:26
【问题描述】:

现在我有两个列表,我试图将它们组合成一个字典,其中一个键是list A 的元素,并且映射到来自list B 的比较值列表。

这些是对象列表。我正在通过相等的模块值过滤对象。

说 A 列表是 [ a1, a2, a3 ] 而 B 列表是 [ b1, b2, b3, b4] 。我将每个 B 列表值与嵌套 for 循环中的每个 A 列表值进行比较。如果它们具有相同的模块值,则将 b_value 附加到 z,这是一个仅包含与某个 a_value 模块匹配的 b_values 的新列表。新列表 z 应该是与 z 列表具有相同模块的 a_value 键的值(过滤后的 b_values)

考虑:

listA = []   # every a value in list a should be a key
listB = []   #contains many b values that must be filtered
execute = {}

for i in listA:
     z = []
     for j in listB:
          if j.module == i.module
               z.append(j)
     execute[i] = z                   # append full list as value for
                                      # key x

虽然这似乎不像我期望的那样构建字典。

dict 最终可能看起来像这样: { a1: [b2, b3, b7] a2: [b1, b2, b6, b9] a3: [b4, b11]}

我是否以正确的方式处理这个问题?我看到元组可能是一个选择,但我不知道如何。

感谢任何帮助!谢谢

【问题讨论】:

    标签: python list dictionary 2d


    【解决方案1】:

    你只犯了一个简单的错误。 执行[i] = z

    试试这个作为一个例子(为简单起见删除了过滤器):

    import sys
    
    listA = []
    listB = []
    execute = {}
    
    listA.append("A1")
    listA.append("A2")
    listB.append("B1")
    listB.append("B2")
    
    for i in listA:
         z = []
         for j in listB:
            z.append(j)
         execute[i] = z
    
    print execute
    

    【讨论】:

    • 输出是 {'A1': ['B1', 'B2'], 'A2': ['B1', 'B2']}
    • 谢谢,在我的例子中这是一个错字。我真正的问题实际上是我定义了自己的对象并且没有定义 eq 函数。我过滤期间的比较总是错误的。
    • 啊,这就解释了。很高兴它想通了:)
    猜你喜欢
    • 1970-01-01
    • 2018-12-31
    • 2021-08-02
    • 2017-07-07
    • 1970-01-01
    • 2017-06-28
    • 2012-08-27
    相关资源
    最近更新 更多