【问题标题】:lists to Dictionary and printing in required format列表到字典并以所需格式打印
【发布时间】:2020-06-14 10:06:47
【问题描述】:

我有 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 UI 页面中我想显示这样的元素

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

【问题讨论】:

    标签: django python-3.x list dictionary django-templates


    【解决方案1】:

    您可以使用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 %}
    

    【讨论】:

      【解决方案2】:

      您可以在您的代码之后将您的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 %}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-04-09
        • 1970-01-01
        • 1970-01-01
        • 2021-09-27
        • 2020-08-27
        • 1970-01-01
        • 2019-09-19
        相关资源
        最近更新 更多