在python中,组合2个字典的值

时间:2017-07-21 08:38:33

标签: python dictionary

我是Python的新手,我在python中有两个关于字典的问题。

  1. 我有dict1(其值已经是list),然后我dict2的{​​{1}}与keys相同,我想将新值添加到dict1list的值中。我怎么写呢?你能举例说明吗?

    dict1

    预期产出:

    dict1 = {'uid': ['u1'], 'sid': ['s1'], 'os': ['os1']}
    
    dict2 = {'uid': ['u2'], 'sid': ['s2'], 'os': ['os2']}
    
    1. 我将在文本文件中处理很多行,每行创建一个新字典。这是我的代码的想法:

      dict1 = {'uid': ['u1', 'u2'], 'sid': ['s1', 's2'], 'os': ['os1', 'os2']}
      
    2. 是否有更好的方法可以使用更少的内存或更快地运行(仍使用字典)?

      提前感谢您的帮助!

4 个答案:

答案 0 :(得分:2)

由于您显然不允许重写解析器,您可以执行以下操作:

for k in dict1:
    dict1[k].extend(dict2.get(k, []))

如果来自两个dicts的密钥始终匹配,您可以删除.get并使用直接订阅。

for k in dict1:
    dict1[k].extend(dict2[k])

否则,您可以创建一个defaultdict(list)并让解析器为其附加值。

答案 1 :(得分:0)

你可以这样做,

python3

如果您使用key in dict2,则可以使用dict2.has_key(key)代替{'os': ['os1', 'os2'], 'sid': ['s1', 's2'], 'uid': ['u1', 'u2']}

<强>结果

{{1}}

答案 2 :(得分:0)

如果您不再需要这两本词典,那么您可以这样做:

def merge_dict(dict1, dict2):
    for k in dict1:
        try:
            dict1[k].extend(dict2[k])
        except KeyError:
            pass
    return dict1

否则,如果您想将它们保存以备将来使用,请尝试使用

def merge_dict(dict1, dict2):
    new_dict = {}
    keys = dict1.keys() + dict2.keys()
    for k in keys:
        try:
            new_dict[k] = dict1[k]
        except KeyError:
            new_dict[k] = dict2[k]
            continue
        try:
            new_dict[k]+= dict2[k]
        except KeyError:
            pass
    return dict1

答案 3 :(得分:0)

这可能对您有所帮助。

nohup