【问题标题】:Count items from a list and append them into a dictionary if the key is in the list如果键在列表中,则计算列表中的项目并将它们附加到字典中
【发布时间】:2021-12-25 04:28:36
【问题描述】:

如果项目与字典键一致,我正在尝试计算不同列表中的项目并将它们附加到字典中,但我正在努力解决语法和缩进,这就是我想要做的:

# 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']

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

感谢您的帮助!

【问题讨论】:

  • 你为什么要压缩字典的键?你永远不会使用key 做任何事情。
  • 每次循环时都对字典进行深拷贝。

标签: python list dictionary for-loop append


【解决方案1】:

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)

【讨论】:

  • 'deepcopy' 和 'collections.Counter()' 都非常适合这项工作。谢谢!
猜你喜欢
  • 1970-01-01
  • 2021-07-02
  • 1970-01-01
  • 2020-08-19
  • 2022-01-06
  • 1970-01-01
  • 2014-06-03
  • 2020-04-09
  • 2022-01-22
相关资源
最近更新 更多