我创建了一个结构如下的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
来检查列表中是否存在项目item
list
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]))