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
的每个triplets
与sub-lists
的transactions
的元素的交集。如果相交产生的结果与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字典,作为不增加值的元组键的主要内容,如果未能解决你的问题,请参考以下文章