【问题标题】:Adding two list into a dictionary and allowing values with similar titles to merge将两个列表添加到字典中并允许合并具有相似标题的值
【发布时间】:2019-03-01 23:08:48
【问题描述】:

我刚刚将一些列导入到 python 的两个列表中。我正在尝试将两个列表一起添加到字典中,并具有具有总计值的唯一对象。例如,'Apple' 和 'Apple' 将返回 'Apple': 14.0',因为它们是组合在一起的。如何产生所需的输出?我必须在我的 for 循环中添加任何内容吗?

listA = ['Apple', 'Apple', 'Banana', 'Orange', 'Pineapple', 'Pineapple']
listB = ['5.0', '9.0', '12.0', '2.0', '8.0', '1.0']
dict={}

for i, x in zip((listA),(listB)):
    dict[i]=x

输出:

{'Apple':'9.0', 'Banana':'12.0', 'Orange':'2.0', 'Pineapple':'1.0'}

期望的输出:

{'Apple':'14.0', 'Banana':'12.0', 'Orange':'2.0', 'Pineapple':'9.0'}

【问题讨论】:

    标签: python python-2.7 list dictionary for-loop


    【解决方案1】:

    您可以使用collections.defaultdict() 在遇到相同键时自动添加您的值,例如:

    import collections
    
    listA = ['Apple', 'Apple', 'Banana', 'Orange', 'Pineapple', 'Pineapple']
    listB = ['5.0', '9.0', '12.0', '2.0', '8.0', '1.0']
    
    result = collections.defaultdict(float)
    for k, v in zip(listA, listB):
        result[k] += float(v)
    

    然而,这将产生一个带有浮点数的结果,即:

    {'Apple': 14.0, 'Banana': 12.0, 'Orange': 2.0, 'Pineapple': 9.0}
    

    如果您需要字符串结果,您可以对结果进行后处理:

    result = {k: str(v) for k, v in result.iteritems()}  # Python 3.x: result.items()
    # {'Apple': '14.0', 'Banana': '12.0', 'Orange': '2.0', 'Pineapple': '9.0'}
    

    或者你可以在没有collections.defaultdict()的情况下处理整个事情:

    listA = ['Apple', 'Apple', 'Banana', 'Orange', 'Pineapple', 'Pineapple']
    listB = ['5.0', '9.0', '12.0', '2.0', '8.0', '1.0']
    
    result = {}
    for k, v in zip(listA, listB):
        result[k] = str(float(result.get(k, 0)) + float(v))
    # {'Apple': '14.0', 'Banana': '12.0', 'Orange': '2.0', 'Pineapple': '9.0'}
    

    【讨论】:

      【解决方案2】:

      只需使用default dict

      In [1]: from collections import defaultdict
      
      In [2]: listA = ['Apple', 'Apple', 'Banana', 'Orange', 'Pineapple', 'Pineapple']
         ...: listB = ['5.0', '9.0', '12.0', '2.0', '8.0', '1.0']
         ...: 
         ...: 
      
      In [3]: d = defaultdict(float)
      
      In [4]: for i, x in zip((listA),(listB)):
         ...:     d[i] += float(x)
         ...:     
      
      In [5]: d
      Out[5]: 
      defaultdict(float,
                  {'Apple': 14.0, 'Banana': 12.0, 'Orange': 2.0, 'Pineapple': 9.0})
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-07-06
        • 2017-04-20
        • 2019-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-10
        相关资源
        最近更新 更多