Python字典,作为不增加值的元组键

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python字典,作为不增加值的元组键相关的知识,希望对你有一定的参考价值。

我有一个列表列表,例如transactions = [['1','2','3','4','5','6'],['2','3','6','1','5','10],['6','4','5','6','4','3']]和以元组为键的Dict,例如triplets = (1,2,3): 0, (2,3,4):0现在,我想检查triplets的键是否在事务中发生,因为(1,2,3)在第一个嵌套列表中,然后我将更新该键元组的值(它将从0变为1)。如果在另一个列表中找到它,例如它也可以在第二个列表[2,3,6,1,5,10]中使用,然后它的计数将从1增加到2。整个triplets都将继续执行此过程。

我写了这段代码,但它没有增加计数。

    for items in triplets.keys():
        if items in transactions:
            triplets[items] = triplets[items] + 1

如果有人可以正确编辑问题标题,请。我找不到合适的词问。

答案

解决方案

您可以使用set检查keys的每个tripletssub-liststransactions的元素的交集。如果相交产生的结果与key相同,则增加key词典中该triplets的计数。

transactions = [[1,2,3,4,5,6],[2,3,6,1,5,10],[6,4,5,6,4,3]]
transactions = [[str(e) for e in ee] for ee in transactions]
print('transactions: '.format(transactions))
triplets = (1,2,3): 0, (2,3,4):0
print('triplets: ')
print('\tBefore Update: '.format(triplets))

for key in triplets.keys():
    count = triplets.get(key)
    for t in transactions:
        s = set(list(key))
        count += int(set(t).intersection(s) == s)
    triplets.update(key: count)

print('\tAfter Update: '.format(triplets))

输出

transactions: [['1', '2', '3', '4', '5', '6'], ['2', '3', '6', '1', '5', '10'], ['6', '4', '5', '6', '4', '3']]
triplets: 
    Before Update: (1, 2, 3): 0, (2, 3, 4): 0
    After Update: (1, 2, 3): 0, (2, 3, 4): 0
另一答案

您的条件是否始终为假。

认为这就是您想要的,

for items in triplets.keys():
    for transaction in transactions:
        if all(x in map(int,transaction) for x in items): #python 2
        #if all(x in list(map(int,transaction)) for x in items): #python 2 and 3
            triplets[items] = triplets[items]+1

输出:

(2, 3, 4): 1, (1, 2, 3): 2

根据有问题的更改进行编辑

以上是关于Python字典,作为不增加值的元组键的主要内容,如果未能解决你的问题,请参考以下文章

python的元组能作为字典的key吗?为什么?

python的元组能作为字典的key吗?为什么?

python的元组能作为字典的key吗?为什么?

如何在python字典中访问/断言元组键值

如何将带有元组键的 python 字典转换为 pandas 多索引数据框?

使用元组键将 Pandas 数据框转换为字典以进行三元图