Following on your [last post][1], your initial file `test.txt` looks like that: ``` WP_XXXXXXXX2.1 PF06325 Ribosomal protein L11 methyltransferase (PrmA) 5 WP_192XXXXXX.1 PF13489 Methyltransferase domain 4 XXXXXXX45.1 PF02310 B12 binding domain 12 XXXXXXX45.1 PF04055 Radical SAM superfamily 5 WP_XXXXXXX29.1 PF13489 Methyltransferase domain 4 WP_0XXXXXXXX.1 PF13489 Methyltransferase domain 4 WP_XXXXXXX90.1 PF06325 Ribosomal protein L11 methyltransferase (PrmA) 5 WP_XXXXXXX90.1 PF06325 Ribosomal protein L11 methyltransferase (PrmA) 7 WP_0XXXXXX62.1 PF13489 Methyltransferase domain 4 ``` And you have another file `order.txt` that contains your ordered IDs: ``` XXXXXXX45.1 YP_343434.1 WP_XXXXXXXX2.1 WP_XXXXXXX90.1 WP_0XXXXXX62.1 XP_222222222.2 WP_192XXXXXX.1 WP_XXXXXXX29.1 WP_0XXXXXXXX.1 ``` Since you want to merge by the first field in `test.txt` and sort them according to `order.txt`, you have to read first both of the files: ```python3 # read 'test.txt' with open("test.txt",'r') as rf: l = rf.readlines() # read sorted IDs 'order.txt' with open("order.txt",'r') as rf: l_order = rf.readlines() # remove newlines from each element in list l_order = [i.strip() for i in l_order] ``` My previous answers describe how we obtain the merged fields in the file, so I will not go over it again. Since we need to sort the dictionary according to the list, we simply have to do: ```python3 # for each element in ordered list for i in l_order: if i in dict_id.keys(): # if element is in my dictionary's keys print(i + "\t" + "; ".join(dict_id[i])) # print the key and the value else: print(I) # else prints the element ``` This should print: ``` XXXXXXX45.1 PF02310 B12 binding domain 12; PF04055 Radical SAM superfamily 5 YP_343434.1 WP_XXXXXXXX2.1 PF06325 Ribosomal protein L11 methyltransferase (PrmA) 5 WP_XXXXXXX90.1 PF06325 Ribosomal protein L11 methyltransferase (PrmA) 5; PF06325 Ribosomal protein L11 methyltransferase (PrmA) 7 WP_0XXXXXX62.1 PF13489 Methyltransferase domain 4 XP_222222222.2 WP_192XXXXXX.1 PF13489 Methyltransferase domain 4 WP_XXXXXXX29.1 PF13489 Methyltransferase domain 4 WP_0XXXXXXXX.1 PF13489 Methyltransferase domain 4 ``` Full code: ```python3 with open("test.txt",'r') as rf: l = rf.readlines() with open("order.txt",'r') as rf: l_order = rf.readlines() l_order = [i.strip() for i in l_order] dict_id = {} for i in l: key_id = i.split("\t")[0] if key_id not in dict_id.keys(): value = "\t".join(i.split("\t")[1:]).rstrip() dict_id[key_id] = [value] else: dict_id[key_id].append("\t".join(i.split("\t")[1:]).rstrip()) for i in l_order: if i in dict_id.keys(): print(i + "\t" + "; ".join(dict_id[i])) else: print(i) ``` PS: please for further pure programming questions, do post your questions in StackOverflow instead of Bioinformatics. [1]: https://bioinformatics.stackexchange.com/questions/18412/connect-same-ids-with-values-in-id-rows-result-of-effectiveeld/18413#18413