字典之间的python查找



有办法加快速度吗?当前使用2用于循环(考虑重复(。有什么加快速度的建议吗?

d1 = [{'key': 't1', 'val': 1}, {'key': 't2', 'val': 2}, {'key': 't3', 'val': 3}, {'key': 't4', 'val': 4}, {'key': 't5', 'val': 5}, {'key': 't6', 'val': 6}, {'key': 't7', 'val': 7}, {'key': 't8', 'val': 8}, {'key': 't9', 'val': 9}, {'key': 't10', 'val': 10}, {'key': 't11', 'val': 11}, {'key': 't12', 'val': 12}, {'key': 't13', 'val': 13}, {'key': 't14', 'val': 14}, {'key': 't15', 'val': 15}, {'key': 't16', 'val': 16}, {'key': 't17', 'val': 17}, {'key': 't18', 'val': 18}, {'key': 't19', 'val': 19}]
d2 = [{'key': 't1', 'val': 'newval1'}, {'key': 't1', 'val': 'newval11'}, {'key': 't2', 'val': 'newval2'}, {'key': 't3', 'val': 'newval3'}, {'key': 't6', 'val': 'newval6'}, {'key': 't7', 'val': 'newval7'}, {'key': 't8', 'val': 'newval8'}, {'key': 't9', 'val': 'newval9'}, {'key': 't10', 'val': 'newval10'}, {'key': 't11', 'val': 'newval11'}, {'key': 't12', 'val': 'newval12'}, {'key': 't13', 'val': 'newval13'}, {'key': 't14', 'val': 'newval14'}, {'key': 't15', 'val': 'newval15'}, {'key': 't16', 'val': 'newval16'}, {'key': 't17', 'val': 'newval17'}, {'key': 't18', 'val': 'newval18'}, {'key': 't19', 'val': 'newval19'}]

>>> for x in d1:
...     for y in d2:
...         if x['key'] == y['key']:
...             print(x['key'], x['val'], y['val'])
...
('t1', 1, 'newval1')
('t1', 1, 'newval11')
('t2', 2, 'newval2')
('t3', 3, 'newval3')
('t6', 6, 'newval6')
('t7', 7, 'newval7')
('t8', 8, 'newval8')
('t9', 9, 'newval9')
('t10', 10, 'newval10')
('t11', 11, 'newval11')
('t12', 12, 'newval12')
('t13', 13, 'newval13')
('t14', 14, 'newval14')
('t15', 15, 'newval15')
('t16', 16, 'newval16')
('t17', 17, 'newval17')
('t18', 18, 'newval18')
('t19', 19, 'newval19')

使用这个结构No.…它们是两个列表,您需要对它们进行迭代以找到您要查找的内容。

但您可以使用它们的密钥将这些数据存储为字典的字典:(在您确认d1始终具有唯一密钥后,只需将d1转换为字典的词典即可(

d1 = {d['key']: {'val': d['val']} for d in d1}

通过这种方式,您可以对d2(单个for循环(进行迭代,并从d1中选择相关值。

for d in d2:
key, value = d['key'], d['val']
print(key, d1[key]['val'], value)

这是完整的代码:

d1 = [{'key': 't1', 'val': 1}, {'key': 't2', 'val': 2}, {'key': 't3', 'val': 3},
{'key': 't4', 'val': 4}, {'key': 't5', 'val': 5}, {'key': 't6', 'val': 6},
{'key': 't7', 'val': 7}, {'key': 't8', 'val': 8}, {'key': 't9', 'val': 9},
{'key': 't10', 'val': 10}, {'key': 't11', 'val': 11},
{'key': 't12', 'val': 12}, {'key': 't13', 'val': 13},
{'key': 't14', 'val': 14}, {'key': 't15', 'val': 15},
{'key': 't16', 'val': 16}, {'key': 't17', 'val': 17},
{'key': 't18', 'val': 18}, {'key': 't19', 'val': 19}]
d2 = [{'key': 't1', 'val': 'newval1'}, {'key': 't1', 'val': 'newval11'},
{'key': 't2', 'val': 'newval2'}, {'key': 't3', 'val': 'newval3'},
{'key': 't6', 'val': 'newval6'}, {'key': 't7', 'val': 'newval7'},
{'key': 't8', 'val': 'newval8'}, {'key': 't9', 'val': 'newval9'},
{'key': 't10', 'val': 'newval10'}, {'key': 't11', 'val': 'newval11'},
{'key': 't12', 'val': 'newval12'}, {'key': 't13', 'val': 'newval13'},
{'key': 't14', 'val': 'newval14'}, {'key': 't15', 'val': 'newval15'},
{'key': 't16', 'val': 'newval16'}, {'key': 't17', 'val': 'newval17'},
{'key': 't18', 'val': 'newval18'}, {'key': 't19', 'val': 'newval19'}]
d1 = {d['key']: {'val': d['val']} for d in d1}
for d in d2:
key, value = d['key'], d['val']
print(key, d1[key]['val'], value)

输出:

t1 1 newval1
t1 1 newval11
t2 2 newval2
t3 3 newval3
t6 6 newval6
t7 7 newval7
t8 8 newval8
t9 9 newval9
t10 10 newval10
t11 11 newval11
t12 12 newval12
t13 13 newval13
t14 14 newval14
t15 15 newval15
t16 16 newval16
t17 17 newval17
t18 18 newval18
t19 19 newval19

最新更新