我有一个字典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']