簡體   English   中英

如果鍵在列表中,則計算列表中的項目並將它們附加到字典中

[英]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']

我知道對於每個列表,計數都會覆蓋前一個列表,所以我也想知道是否有一種方法可以存儲值以將它們添加到另一個列表中。

感謝您的幫助!

做的深層副本ABC_dictionary每個列表中lists 然后您可以將所有這些副本放入另一個列表中。

使用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)

類似於 Barmar 的回答,但使用 ChainMap:

from collections import Counter, ChainMap

for list_ in lists:
    counter = Counter(list_)
    results.append({
        key: ChainMap(values, {'count': counter[key]})
        for key, values in ABC_dictionary.items()  
    })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM