在python中,组合两个字典的值
我是Python新手,关于Python中的字典,我有两个问题在python中,组合两个字典的值,python,dictionary,Python,Dictionary,我是Python新手,关于Python中的字典,我有两个问题 我有dict1(其中值已经是list),然后我有dict2,具有与dict1相同的键,我想将新值添加到dict1中值的列表中。我怎么写呢?你能举例说明吗 dict1 = {'uid': ['u1'], 'sid': ['s1'], 'os': ['os1']} dict2 = {'uid': ['u2'], 'sid': ['s2'], 'os': ['os2']} 预期产出: dict1 = {'uid': ['u1', 'u2
dict1
(其中值已经是list
),然后我有dict2
,具有与dict1
相同的键,我想将新值添加到dict1
中值的列表中。我怎么写呢?你能举例说明吗
dict1 = {'uid': ['u1'], 'sid': ['s1'], 'os': ['os1']}
dict2 = {'uid': ['u2'], 'sid': ['s2'], 'os': ['os2']}
预期产出:
dict1 = {'uid': ['u1', 'u2'], 'sid': ['s1', 's2'], 'os': ['os1', 'os2']}
count = 0
for line in f:
if count == 0:
dict1 = parse_qs(line)
count = count+1
else:
dict2 = parse_qs(line)
#combine dict1 with dict 2, and assign the new dict to dict1
for key in dict1.keys():
if dict2.has_key(key):
dict1[key].extend(dict2[key])
如果您使用的是python3
,您可以在dict2中使用key,而不是dict2。has_key(key)
结果
{'os': ['os1', 'os2'], 'sid': ['s1', 's2'], 'uid': ['u1', 'u2']}
由于显然不允许您重写解析器,您可以执行以下操作:
for k in dict1:
dict1[k].extend(dict2.get(k, []))
如果两个DICT中的密钥始终匹配,则可以删除.get
并使用直接订阅
for k in dict1:
dict1[k].extend(dict2[k])
否则,您可以创建一个defaultdict(list)
,并让解析器将值附加到其中。如果您不再需要这两个词典,则可以执行以下操作:
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
这可能对你有帮助
from itertools import chain
from collections import defaultdict
# ------ for dict1 -------#
u1 = [1,2,3]
s1 = ['a','b','c']
x1 = [10,100,1000]
# ------ for dict2 -------#
u2 = [4,5,6]
s2 = ['d','e','f']
x2 = ['aa','bb','cc']
dict1 = {1:u1,2:s1,3:x1}
dict2 = {1:u2,2:s2,3:x2}
dict3 = defaultdict(list)
for a, b in chain(dict1.items(), dict2.items()):
dict3[a].append(b)
#for a, b in dict3.items():
# print(a, b)
print dict3
不要创建多个dict。创建一个defaultdict(list)
,让您的解析器向其附加值。我正在使用urlparse,因此它会自动为我提供一个dict。这是我尝试清理数据的最佳方式。不过还是要谢谢。这肯定是重复的。在这里使用extend
会更好.extend(dict2[key])
dict2
的值可能为len>1,dict2中的key
比has\u key
更受欢迎,因为从永远以来,has\u key
甚至在Python 3中消失了。