Python:使用另一个大字典更新大字典

Eri*_*til 13 python dictionary python-2.7

我试图使用来自另一个字典的值来更新大字典的某些值,在这些字典中它们具有相似的键(相同的日期但是格式不同).我目前使用的过程太慢,我想减少瓶颈.

这是我目前的解决方案(它将更新的dict写入文件):

from dateutil import parser
File = open(r'E:Test1.txt','w')

b = {'1946-1-1':0,..........,'2012-12-31':5}
d = {'1952-12-12':5,........,'1994-7-2':10}

for key1, val1 in b.items():
    DateK1 = parser.parse(key1)
    Value = val1
    for key2, val2 in d.items():
        DateK2 = parser.parse(key2)
        if DateK1 == DateK2:
            d[key2] = Value        

Order= sorted(d.items(), key=lambda t: t[0])

for item in Order:
    File.write('%s,%s\n' % item)
File.close()
Run Code Online (Sandbox Code Playgroud)

And*_*den 22

您应该使用该update方法合并字典:

b.update(d)
Run Code Online (Sandbox Code Playgroud)

.

目前你正在d为每个键重复b...这很慢.您可以通过设置两个具有匹配键的字典来解决这个问题(相同的日期将使用相同的哈希值 - 这里可能需要注意的很酷的事情是datetime对象哈希):

b1 = dict( (parser.parse(k),v) for k,v for b.iteritems() )
d1 = dict( (parser.parse(k),v) for k,v for d.iteritems() )

d1.update(b1) # update d1 with the values from b1
Run Code Online (Sandbox Code Playgroud)

编辑:

我刚刚意识到你不是做一个更新,因为正在更新只有那些共同的价值观,所以不是(再次只迭代一次):

for k_d1 in d1:
    if k_d1 in b1:
        d1[k_d1] = b1[k_d1]
Run Code Online (Sandbox Code Playgroud)