检查列表中的部分元素是否重复

时间:2017-07-08 12:46:12

标签: python

我有一个列表,我按以下方式填写:

complete = []
for (i,j) in list:
    complete.append('%s %s %s'%(i,j,R[i,j]))

该列表(作为示例)具有以下元素:

complete = ['B A 1', 'A H 1', 'P B 1', 'H B 1', 'B W 1', 'B M 9', 'M R 9', 'R P 9', 'P A 9', 'C S 7', 'B C 7', 'B A 7', 'A H 7', 'B P 7', 'M B 7', 'P B 7', 'H B 7']

我想检查哪些字母重复,并在这种情况下添加与它们对应的数字。 在这个例子中,(B A)以1和7重复,因此其中一个输出必须是'B A 8'。

我也可以改变我追加元素的方式来完成,但我不知道其他方式。

谢谢!

2 个答案:

答案 0 :(得分:2)

你可以试试这个:

from collections import Counter, defaultdict
complete =  ['ASO BAIS 1', 'HEL CIO 5'] 

d = Counter([i[:-1] for i in complete])

new_d = defaultdict(int)

for i in complete:
   if d[i[:-1]] > 0:
     new_d[i[:-1]] += int(i[-1])

print(dict(new_d))
#maximum value:
maximum = max(new_d.values())
print(maximum)

输出:

{'HEL CIO ': 5, 'ASO BAIS ': 1}

答案 1 :(得分:0)

这可以通过两个步骤非常简单地完成:

  1. 首先,获取列表中唯一字母对的列表。这将用于制作字典。
  2. 接下来,迭代列表中的每个元素,并使用当前字母对来索引字典。通过将元素中的最后一个字符强制转换为整数来增加字典对的键值对。
  3. >>> lst = ['B A 1', 'A H 1', 'P B 1', 'H B 1', 'B W 1', 'B M 9', 'M R 9', 'R P 9', 'P A 9', 'C S 7', 'B C 7', 'B A 7', 'A H 7', 'B P 7', 'M B 7', 'P B 7', 'H B 7']
    >>> keys = set(key[:3] for key in lst)
    >>> 
    >>> new_dict = {key: 0 for key in keys}
    >>> for el in lst:
    ...     new_dict[el[:3]] += int(el[4])
    ... 
    >>> new_dict
    {'B C': 7, 'H B': 8, 'R P': 9, 'B A': 8, 'B P': 7, 'B M': 9, 'P A': 9, 'A H': 8, 'C S': 7, 'M B': 7, 'M R': 9, 'P B': 8, 'B W': 1}
    >>> 
    
相关问题