将元组列表列表转换为 dict 未按预期工作

Posted

技术标签:

【中文标题】将元组列表列表转换为 dict 未按预期工作【英文标题】:conversion of list of list of tuples to dict not working as expected 【发布时间】:2021-07-01 07:53:33 【问题描述】:

我正在尝试创建dict,因为这个列表列表包含元组。目的是将所需的元组过滤到最终列表中。

到目前为止我所尝试的:

dict_1 = dict()
for val,sim in result:
    dict_1.setdefault(val, [])


print(result)

当我查看结果并解压缩两个值 (val,sim) 时,它工作正常。但是每次我得到的情况不同时,可能会有多个值要解包,然后它会给出这个错误:

ValueError: too many values to unpack (expected 2).

如何让上面的循环for val,sim in result:灵活?

这是输入格式:

[[(1.0, 2481), (0.125, 5)], [(1.0, 2481), (0.10526315789473684, 1), (0.0, 5), (0.0, 4), (0.0, 3), (0.0, 2)], [(1.0, 2481), (0.11764705882352941, 2), (0.0, 5), (0.0, 4), (0.0, 3), (0.0, 1)], [(1.0, 2481), (0.13333333333333333, 3), (0.0, 5), (0.0, 4), (0.0, 2), (0.0, 1)], [(1.0, 2481), (0.1, 4), (0.0, 5), (0.0, 3), (0.0, 2), (0.0, 1)]]

我的最终目标是先制作字典,然后开始过滤我只对具有特定值sim 的元组感兴趣的元组sim,但在此之前我被困在上面的部分。

期望的输出:

[(1.0, 2481), (0.125, 5), (0.10526315789473684, 1),(0.11764705882352941, 2), (0.13333333333333333, 3), (0.1, 4)]

我只是一个初学者。我知道这可能不是提问的正确方式。但任何形式的正确方向的小指导都将不胜感激!

【问题讨论】:

但是你没有创建dict?您的方法不适用于单个循环,因为很明显您有一个 nested 结构,至少需要 2 个循环(即使循环本身隐藏在某个库中:P) 您是如何得出结果的?可能你不需要介于两者之间的字典。 for i in range (len(m)): PA, AP, size_m2 = matrixNew(read_PA_au(au, m[i-1])) APA = (AP * PA).todense() result.append(fuc2(au, APA, size_m2,k)) dict_1 = dict() for val,sim in result: dict_1.setdefault(val, []) print(result) 这是我得到的结果 [[(1.0, 2481), (0.1, 4)], [(1.0, 2481), (0.10526315789473684, 1)], [(1.0, 2481), (0.11764705882352941, 2)], [(1.0, 2481), (0.13333333333333333, 3)]] 【参考方案1】:

你可以试试嵌套切片:

a = [[(1.0, 2481), (0.125, 5)], 
     [(1.0, 2481), (0.10526315789473684, 1), (0.0, 5), (0.0, 4), (0.0, 3), (0.0, 2)], 
     [(1.0, 2481), (0.11764705882352941, 2), (0.0, 5), (0.0, 4), (0.0, 3), (0.0, 1)], 
     [(1.0, 2481), (0.13333333333333333, 3), (0.0, 5), (0.0, 4), (0.0, 2), (0.0, 1)], 
     [(1.0, 2481), (0.1, 4), (0.0, 5), (0.0, 3), (0.0, 2), (0.0, 1)]]

b = [a[0][0]] + [i[1] for i in a]

print(b)

输出:

[(1.0, 2481), 
 (0.125, 5), 
 (0.10526315789473684, 1), 
 (0.11764705882352941, 2), 
 (0.13333333333333333, 3), 
 (0.1, 4)]

【讨论】:

它确实有帮助!如果我只想要一个唯一的元组列表结束。我试图将最终结果存储到集合中,但它改变了最终输出的格式。 finalresult = [result[0][0]] + [i[1] for i in result[:k]] final = set(itertools.chain.from_iterable(finalresult)) print(final) 它产生了这个:0.0, 1.0, 0.10526315789473684, 0.11764705882352941, 2, 0.13333333333333333, 3, 0.1, 4, 0.125, 5, 12, 2481 finalresult = list(dict.fromkeys(result)) 它通过转换回列表来工作!它还保留了顺序。 作为要求,我从相反方向切分列表,我得到 TypeError: bad operand type for unary -: 'list' 你能帮忙解决一下可能是什么问题吗?这是语句:finalresult = [result[0][0]] + [[i[-j] for j in result[:k]] for i in result[:k]] @Sniper 那么,j 是一个整数吗?如果没有,那么-j 就不行了,对吧? -j 索引处的值不是整数,它是一个元组。我正在尝试访问列表中 -j 索引处的值。从列表的尾部到头部。

以上是关于将元组列表列表转换为 dict 未按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

将元组列表转换为 Pandas 系列

将元组中的列表转换为numpy数组?

Python:将元组列表转换为对象列表?

将元组列表转换为python中的列表

将元组列表转换为字典

将元组列表的字典转换为数据框