基于覆盖先前值的键追加dict

2024-09-22 20:29:23 发布

您现在位置:Python中文网/ 问答频道 /正文

在python 3.8中,我有以下命令:

dict_base= dict()

然后在我的操作中生成另一个dict

dict_1={'Sedan': 'Accord',
        'SUV': 'Pilot'
        }

dict_base.append(dict1)

这会将dict1附加到dict_base。 接下来,我有第二个口述

dict_2={'Sedan': 'Camry',
        'SUV': 'Highlander'
       }

dict_base.append(dict_2)

我期望看到的结果如下:

dict_base={'Sedan': ['Accord', 'Camry'],
           'SUV': ['Pilot', 'Highlander']
           }

我看到的是

dict_base={'Sedan':'Camry',
            'SUV':'Highlander'
          }

因此,我不确定如何正确追加…因为我的追加操作似乎覆盖了以前的值。 谢谢


Tags: 命令basedictpilotaccordappendhighlander口述
3条回答

您可以使用collections.defaultdict而不是将dict_base定义为dict

可以这样-

from collections import defaultdict

dict_1={'Sedan': 'Accord',
        'SUV': 'Pilot'
        }
dict_2={'Sedan': 'Camry',
        'SUV': 'Highlander'
       }

dict_base = defaultdict(list)
    for d in (dict_1, dict_2):
       for key, value in d.items():
         dict_base[key].append(value)
dict_1 = {'Sedan': 'Accord', 'SUV': 'Pilot'}
dict_2 = {'Sedan': 'Camry', 'SUV': 'Highlander'}

您可以将itertoolscollections一起使用:

import itertools
import collections

result = collections.defaultdict(list)
for key, value in itertools.chain(dict_1.items(), dict_2.items()):
    result[key].append(value)
    
print(dict(result))
# Outputs {'Sedan': ['Accord', 'Camry'], 'SUV': ['Pilot', 'Highlander']}

您可以使用collections

import collections

result = collections.defaultdict(list)
for d in (dict_1, dict_2):
    for key, value in d.items():
        result[key].append(value)
    
print(dict(result))
# Outputs {'Sedan': ['Accord', 'Camry'], 'SUV': ['Pilot', 'Highlander']}

见鬼,你甚至什么都不能用:

result = {}
for d in (dict_1, dict_2):
    for key, value in d.items():
        result.setdefault(key, []).append(value)
        
print(result)
# Outputs {'Sedan': ['Accord', 'Camry'], 'SUV': ['Pilot', 'Highlander']}

这可能是collections.defaultdict的一个很好的用例。您不能神奇地将一个包含字符串的dict的每个值附加到包含列表的dict的相应键。Python不知道您想做什么,所以您必须详细说明

制作默认为缺少元素列表的词典:

dict_base = collections.defaultdict(list)

对于dict_1dict_2等的每个元素,告诉python如何处理这些值:

for k, v in dict_1.items():
    dict_base[k].append(v)

dict_2执行相同的操作,或者更好地编写一个函数:

def append_base(base, d):
    for k, v in d.items():
        base[k].append(v)

您也可以使用传统的字典来实现这一点,特别是如果您提前知道键列表:

keys = ['Sedan', 'SUV']
dict_base = {k: [] for k in keys}

相关问题 更多 >