对列表中的项目进行计数,如果键在列表中,则将它们附加到字典中

Count items from a list and append them into a dictionary if the key is in the list

我正在尝试对不同列表中的项目进行计数,如果这些项目与字典键一致,则将它们追加到字典中,但我正在努力解决语法和缩进问题,这就是我正在尝试做的事情:

# List of lists
lists = []
list_1 = (A,B,C)
list_2 = (A,A,B,B,C,C)
list_3 = (A,A,A,B,B,B,C,C,C)
lists.extend([list_1, list_2, list_2])

# Dictionary with several values
ABC_dictionary = {'A': { 'name': 'A', 'MW': 5},
                  'B': { 'name': 'A', 'MW': 6},
                  'c': { 'name': 'A', 'MW': 7},
                  'D': { 'name': 'A', 'MW': 8}}

# Get the letter count on each list
for list in lists:
    for letter, key in zip(list, ABC_dictionary.keys()): 
        if letter in ABC_dictionary.keys():
            ABC_dictionary[letter].update({'count' : 0})
            ABC_dictionary[letter]['count'] += list.count(letter)

然而,这实际上造成了混乱,并返回了我不太了解的计数。

我想要的结果是:

#list_1
    ABC_dictionary = {'A': { 'name': 'A', 'MW': 5, 'count': 1},
                      'B': { 'name': 'A', 'MW': 6, 'count': 1},
                      'c': { 'name': 'A', 'MW': 7, 'count': 1}.
                      'D': { 'name': 'A', 'MW': 8, 'count': 0}}

#list_2
        ABC_dictionary = {'A': { 'name': 'A', 'MW': 5, 'count': 2},
                          'B': { 'name': 'A', 'MW': 6, 'count': 2},
                          'c': { 'name': 'A', 'MW': 7, 'count': 2}.
                          'D': { 'name': 'A', 'MW': 8, 'count': 0}}

#list_3
        ABC_dictionary = {'A': { 'name': 'A', 'MW': 5, 'count': 3},
                          'B': { 'name': 'A', 'MW': 6, 'count': 3},
                          'c': { 'name': 'A', 'MW': 7, 'count': 3}.
                          'D': { 'name': 'A', 'MW': 8, 'count': 0}}

对于每个列表,我将进行一些其他计算,例如:

A_weight = ABC_dictionary['A']['MW'] * ABC_dictionary['A']['count']

我知道对于每个列表,计数都会覆盖前一个,所以我也想知道是否有一种方法可以存储这些值以将它们添加到另一个列表。

感谢您的帮助!

lists 中的每个列表制作 ABC_dictionary 的深拷贝。然后你可以把所有这些副本放到另一个列表中。

使用collections.Counter()计算每个列表中的重复次数。

from copy import deepcopy
from collections import Counter

results = []

for letters in lists:
    cur_dict = deepcopy(ABC_dictionary)
    letter_counts = Counter(letters)
    for letter, d in cur_dict.items()
        d['count'] = letter_counts.get(letter, 0)
    results.append(cur_dict)