检查字典中的值是否是Python中另一个键值对的子字符串



我有一个字典disease_dict,它的值在列表元素中。我想获取特定键的键和值,然后检查该值(作为子字符串(是否存在于其他键中,并获取所有键->值对。

例如,这就是字典。我想看看字典中是否存在"Stroke"或"Stroke",然后匹配此键的值是否是其他值的子字符串(如"C10.228.140.300.275.800"中存在"C10.2281.40.300.775.600"(

'Stroke': ['C10.228.140.300.775', 'C14.907.253.855'], 'Stroke, Lacunar': ['C10.228.140.300.275.800', 'C10.228.140.300.775.600', 'C14.907.253.329.800', 'C14.907.253.855.600']

我有以下几行代码,用于获取特定术语的键和值。

#extract all child terms
for k, v in dis_dict.items():
if (k in ['Glaucoma', 'Stroke']) or (k in ['glaucoma', 'stroke']):
disease = k
tree_id = v
print (disease, tree_id)
else:
disease = ''
tree_id = ''
continue

非常感谢您的帮助!

下面的代码应该可以实现您想要实现的目标:

dis_dict = {
'Stroke':          ['C10.228.140.300.775', 'C14.907.253.855'], 
'Stroke, Lacunar': ['C10.228.140.300.275.800', 'C10.228.140.300.775.600', 'C14.907.253.329.800', 'C14.907.253.855']
}
dict_already_printed = {}
for k, v in dis_dict.items():
if ( k.lower() in ['glaucoma', 'stroke'] ):
disease = k
tree_id = v
output = None
for c_code_1 in tree_id:
for key, value in dis_dict.items():  
for c_code_2 in value: 
if c_code_1 in c_code_2: 
if f'{disease} {tree_id}' != f'{key} {value}':
tmp_output = f'{disease} {tree_id}, other: {key} {value}'
if tmp_output not in dict_already_printed:
output = tmp_output
print(output)
dict_already_printed[output] = None
if output is None: 
output = f'{disease} {tree_id}'
print(output)
else:
disease = ''
tree_id = ''
continue

因此,请使用字典的另一个数据对其进行测试,看看它是否按预期工作。它只在完全匹配的情况下打印:

Stroke ['C10.228.140.300.775', 'C14.907.253.855'], other: Stroke, Lacunar ['C10.228.140.300.275.800', 'C10.228.140.300.775.600', 'C14.907.253.329.800', 'C14.907.253.855']

或者,如果没有发现其他疾病(为了避免匹配,更改了字典值(,则只发现一种:

Stroke ['C10.228.140.300.775', 'C14.907.253.855']

你有一个很好的起点,正如你可能已经知道的,你需要处理密钥来分割它

disease_dict = { 'Stroke': ['C10.228.140.300.775', 'C14.907.253.855'], 'Stroke, Lacunar': ['C10.228.140.300.275.800', 'C10.228.140.300.775.600', 'C14.907.253.329.800', 'C14.907.253.855.600'], 'Flue' : ['C10.228.140.300.780'] } 
for k, v in disease_dict.items():
tmp = ''.join(x for x in k if x.isalpha() or x == '-' or x == ' ')
tmpKey = tmp.split(' ')
for tk in tmpKey:
if tk.capitalize() in ['Stroke', 'Glaucoma']:
print(k, v, end= ' ') # To remove the new line ending
print(notable_diseases)

首先,我们使用以下行删除不必要的字符:

tmp = ''.join(x for x in k if x.isalpha() or x == ' ' or x == '-')

它只保留字母、空格和短划线。由于我不知道你的疾病是什么样子的,我只保留了那些字符(下一行需要空格(。在创建了这个新的格式化键之后,我们用空格将其拆分,然后比较子字符串。

tmpKey = tmp.split(' ')

一旦制作出tmpKey,我们就会对其进行循环检查,以检查您想要的疾病是否属于原始密钥。

for tk in tmpKey:
if tk.capitalize() in ['Stroke', 'Glaucoma']:
print(k, v, end= ' ') # To remove the new line ending

tk.capitalize()用于将第一个字母大写,这样就不必检查单词的两种形式。

最后,在运行了上面的脚本之后,我们得到了以下结果:

Stroke ['C10.228.140.300.775', 'C14.907.253.855'] Stroke, Lacunar ['C10.228.140.300.275.800', 'C10.228.140.300.775.600', 'C14.907.253.329.800', 'C14.907.253.855.600'] 

最新更新