Python 字典检查值是否与其他键值匹配



我创建了一个结构如下的python字典:-

mydict = {'2018-08' : [32124,4234,23,2323,32423,342342],
'2018-07' : [13123,23424,2,3,4343,4232,2342],
'2018-06' : [1231,12,12313,12331,3123131313,434546,232]}

我想检查键'2018-08'值中的任何值是否与其他键的任何值匹配。 有没有简短的方法可以写这个?

您可以简单地循环访问mydict的预期值,然后为每个值检查它是否存在于字典的任何值中

您可以使用成语if item in list来检查列表中是否存在项目itemlist

expected_values = mydict['2018-08']
found = False
for expected in expected_values:
for key in mydict:
if expected in mydict[key]:
found = True
break

考虑到这是一种蛮力算法,它可能不是大型词典的最佳解决方案

这个问题很模糊,所以我假设您希望目标月份(例如 2018-08(中的值包含在其他月份的某个地方。

与列表迭代相比,集合测试成员资格的速度要快得多。

target = '2018-08'
s = set()
for k, v in mydict.iteritems():
if k != target:
s.update(v)
matches = set(mydict[target]) & s

可以使用 itertools.chain 创建一个长列表

import itertools
for key,value in mydict.items():
temp_dict = mydict.copy()
temp_dict.pop(key)
big_value_list=list(itertools.chain(*temp_dict.values()))
print(key, set(value) & set(big_value_list))

通过更改提供的输入进行试运行

mydict = {'2018-08' : [32124,4234,23,2323,32423,342342],
'2018-07' : [13123,23424,2,3,4343,4232,2342],
'2018-06' : [1231,12,12313,12331,3123131313,434546,232,342342,2342]}

输出:

('2018-08', set([342342]))
('2018-07', set([2342]))
('2018-06', set([342342, 2342]))

最新更新