我是Python的新手,我在python中有两个关于字典的问题。
我有dict1
(其值已经是list
),然后我dict2
的{{1}}与keys
相同,我想将新值添加到dict1
中list
的值中。我怎么写呢?你能举例说明吗?
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']}
是否有更好的方法可以使用更少的内存或更快地运行(仍使用字典)?
提前感谢您的帮助!
答案 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