списки в Dictinary и печать в необходимом формате - PullRequest
1 голос
/ 02 марта 2020

У меня есть 2 списка, подобных этому

list1=['TEL', 'TEL', 'TEL', 'US0_STU', 'infocollect feml sfx-infocollect.sh CCR', 'TEL', 'TEL', 'TEL TEL.SYM dbase.mgr maoagent maoagent.SYM sysopt confmem']
listcr=['RA CROXES-23814', 'RA CROXES-23772', 'RA CROXE-16484', 'RA CROXE-16387', 'RA CROXE-16294', 'RA CROXE-16210', 'RA CROXE-16140', 'RA CROXE-16101']

Я попытался сформировать словарь со следующим кодом

mydict = {}
k=0
for i in range(len(list1)):

index=i
if list1[i].find(" ")>=0:
    bin_list = list1[i].split(" ") 
    for binary in bin_list:
        mydict.update({k:[binary,listcr[index]]})
        k+=1
else:
    mydict.update({k:[list1[i],listcr[index]]})
    k+=1
print(mydict)

так что myDict похож на это

   mydict={0: ['TEL', 'RA CROXES-23814'], 1: ['TEL', 'RA CROXES-23772'], 2: ['TEL', 'RA CROXE- 16484'], 3: ['US0_STU', 'RA CROXE-16387'], 4: ['infocollect', 'RA CROXE-16294'], 5: ['feml', 'RA CROXE- 16294'], 6: ['sfx-infocollect.sh', 'RA CROXE-16294'], 7: ['CCR', 'RA CROXE-16294'], 8: ['TEL', 'RA CROXE-16210'], 9: ['TEL', 'RA CROXE-16140'], 10: ['TEL', 'RA CROXE-16101'], 11: ['TEL.SYM', 'RA CROXE-16101'], 12: ['dbase.mgr', 'RA CROXE-16101'], 13: ['maoagent', 'RA CROXE-16101'], 14: ['maoagent.SYM', 'RA CROXE-16101'], 15: ['sysopt', 'RA CROXE-16101'], 16: ['confmem', 'RA CROXE- 16101']}

На Django странице пользовательского интерфейса я хочу отображать элементы, подобные этому

TEL                 RA CROXES-23814 RA CROXES-23772 RA CROXE- 16484 RA CROXE-16101 RA CROXE-16210 RA CROXE-16140 
US0_STU             RA CROXE-16387
infocollect         RA CROXE-16294
feml                RA CROXE- 16294
sfx-infocollect.sh  RA CROXE-16294
CCR                 RA CROXE-16294
TEL.SYM             RA CROXE-16101
dbase.mgr           RA CROXE-16101
maoagent            RA CROXE-16101
maoagent.SYM        RA CROXE-16101
sysopt              RA CROXE-16101
confmem             RA CROXE-16101

Я пробовал вот так

{% for key,value in mydict.items %}
<p>{{ value.0 }} {{ value.1 }}<p>
{% endfor %}

, но для TEL Binary это печать:

TEL         RA CROXES-23814
TEL         RA CROXES-23772 
TEL         RA CROXE-16484 
TEL         RA CROXE-16101 
TEL         RA CROXE-16210  
TEL         RA CROXE-16140

Ответы [ 2 ]

1 голос
/ 02 марта 2020

вы можете использовать collections.defaultdict для создания своего диктата:

from collections import defaultdict

my_dict = defaultdict(list)

for k, v in zip(list1, listcr):
    for i in k.split():
        my_dict[i].append(v)

my_dict = {k: ' '.join(v) for k, v in my_dict.items()}

ваш дикт будет:

{'TEL': 'RA CROXES-23814 RA CROXES-23772 RA CROXE-16484 RA CROXE-16210 RA CROXE-16140 RA CROXE-16101',
 'US0_STU': 'RA CROXE-16387',
 'infocollect': 'RA CROXE-16294',
 'feml': 'RA CROXE-16294',
 'sfx-infocollect.sh': 'RA CROXE-16294',
 'CCR': 'RA CROXE-16294',
 'TEL.SYM': 'RA CROXE-16101',
 'dbase.mgr': 'RA CROXE-16101',
 'maoagent': 'RA CROXE-16101',
 'maoagent.SYM': 'RA CROXE-16101',
 'sysopt': 'RA CROXE-16101',
 'confmem': 'RA CROXE-16101'}

и для вашего шаблона:

{% for key, value in mydict.items %}
    <p>{{ key }} {{ value }}<p>
{% endfor %}
0 голосов
/ 02 марта 2020

Вы можете сгруппировать свои my_dict после кода, как показано ниже:

output_dict = {}
for key, val in mydict.items():
    if val[0] in output_dict:
        output_dict[val[0]].append(val[1])
    else:
        output_dict[val[0]] = [val[1]]

И затем использовать в Jinja, как это:

{% if output_dict %}
    {% for obj in output_dict.keys() %}
        {{ obj }}
        {% for val_obj in output_dict[obj] %}
            {{ val_obj }}
        {% endfor %}
        <br>
    {% endfor %}
{% endif %}
...